Ohjelmointikielet ja -paradigmat 5op Markus Norrena
Ko#tehtävä 4 Viimeistele "alkeellinen kuvagalleria". Käytännössä kaksi sivua Yksi jolla voi ladata kuvia palvelimelle (file upload) Toinen jolla ladattuja kuvia voi katsoa (ja selata) Tallenna tietokantaan tiedot ladatuista kuvista
Kotitehtävä 5 "Framework" Selvittele ja suunnittele, mihin valitsemasi Framework soveltuu ja mikä olisi sinua kiinnostava kokeiluprojekti? Esittele ensi kerralla suunnitelma mitä aiot Frameworkilla toteuttaa kurssin aikana (7 kertaa jäljellä) Suunnitelman tulee sisältää viikkokohtainen edistymisaikataulu! Palauta suunnitelmasi Facebook-ryhmäämme (Tiedostot -kohtaan).
Tämän päivän teema Olio-ohjelmoinnin aloitus
Olio-ohjelmointi: PHP Olio-ohjelmointi on eri tapa suunnitella ohjelmistoja kuin proseduraalinen ohjelmointi PHP5:ttä (2004) varten kirjoitettiin koko olio-osio PHP:ssä uusiksi ja siitä tuli aito olio-ohjelmointikieli. Olio-ohjelmoinnin peruskäsitteitä ovat luokka, olio, metodi ja perintä.
Luokka, olio ja metodi Luokka (class) määrittelee jonkun tietyn oliojoukon yhteiset piirteet. Olio on luokan ilmentymä, instanssi. $yhteys = new PDO(); Luo ilmentymän (olion) luokasta PDO ja sijoittaa viittauksen siihen muuttujaan $yhteys
Luokka, olio ja metodi Luokka määrittelee, millaista tietoa olio sisältää (luokan muuttujat) ja miten sitä voi käsitellä (luokan metodit / funktiot). $yhteys = new PDO(); // luo ilmentymän luokasta $yhteys->setattribute(); // kutsuu luokan sisäistä setattribute metodia (funktiota) $kysely = $yhteys->prepare(); // kutsuu prepare funktiota luokasta
Kokeilkaa esimerkkiä Simple <?php class SimpleClass { Class definition // property declaration public $var = 'oletusarvo muuttujalle'; }?> // method declaration public function displayvar() { } echo $this->var;
Luodaan olio ja kokeillaan sen <?php class SimpleClass { // property declaration metodia public $var = 'oletusarvo muuttujalle'; } // method declaration public function displayvar() { echo $this->var; } $olio = new SimpleClass(); $olio->displayvar();?>
Simple Class definition Mitä äsken tapahtui? Mikä koodissa oli yllättävää tai kummallista? Mikä ihmetyttää? Kysymyksiä?
Simple Class definition Basic class definitions begin with the keyword class, followed by a class name, followed by a pair of curly braces which enclose the definitions of the properties and methods belonging to the class. A class may contain its own constants, variables (called "properties"), and functions (called "methods").
Simple Class definition The pseudo-variable $this is available when a method is called from within an object context. $this is a reference to the calling object. To create an instance of a class, the new keyword must be used. Classes should be defined before instantiation. http://php.net/manual/en/ language.oop5.basic.php
Lyhyesti suomeksi Olio kuuluu luokkaan joten aluksi on määriteltävää luokka Luokan ilmentymä luodaan avainsanalla new Luokka sisältää metodeja ja muuttujia Metodi = funktio joka sijaitsee luokan sisällä
Jokaiseen PHP-hommaan ei kannata yrittää olio-ohjelmointia. Yksinkertaiselle sivustolle, olio-ohjelmointi vain monimutkaistaa kehitystä turhaan Mutta monimutkaiseen ja laajaan palveluun, olio-ohjelmointi mahdollistaa yksinkertaisuuden.
PHP:n olio-manuaalisivu Sisältää ohjeita ja esimerkkejä: http://php.net/manual/en/language.oop5.php
Kokeilkaa <?php class Person { } function say_hello() { } echo "Hello from inside the class ". get_class($this).".<br>"; function hello() { } $this->say_hello(); $person = new Person(); $person->say_hello(); $person->hello();?>
Muuttakaa äskeistä Lisätkää Person luokkaan Etunimi ja Sukunimi muuttujat Luokaa koko_nimi metodi joka tulostaa olion kokonimen Luokaa pari oliota,määritelkää niille etu- & sukunimet ja tulostakaa ne koko_nimi metodilla
Vihje: näin pitäisi toimia <?php $person = new Person(); $person->etunimi = 'Liisa'; $person->sukunimi = 'Ricardo'; $new_person = new Person(); $new_person->etunimi = 'Eino'; $new_person->sukunimi = 'Merisaari'; echo $person->koko_nimi()."<br />"; echo $new_person->koko_nimi()."<br />";?>
Esimerkkivastaus <?php class Person { var $etunimi; var $sukunimi; function say_hello() { echo "Hello from inside the class ". get_class($this).".<br />"; } }?> function koko_nimi() { } echo $this->etunimi. " ". $this->sukunimi;
Muita työkaluja - kokeilkaa <?php echo get_class($person). "<br />"; if(is_a($person, 'Person')) { echo "Yup, it's a Person.<br />"; } else { echo "Not a Person.<br />"; } $vars = get_class_vars('person'); foreach($vars as $var => $value) { } echo "{$var}: {$value}<br />"; echo property_exists('person', 'etunimi')? 'true' : 'false';?>
Olioihin viittaaminen $person = new Person(); $customer = $person; Huom! Tämä luo kopion oliosta, joka saattaa viedä hyvin paljon muistia $customer = &$person; Parempi: luo viittauksen olioon kopioimatta sitä Nämä toimivat sitten samalla tapaa: echo $person->koko_nimi(); echo $customer->koko_nimi();
Konstruktori Konstruktori suoritetaan aina kun olio luodaan Sopiva esim. kaikenlaisten alkuarvojen asettamiseen Konstruktorin nimi on aina construct Tässä esim. jossa olion ilmentymälle välitetään alkuarvo konstruktorin avulla:
Konstruktori esim. Kokeilkaa! <?php class Henkilo { var $nimi; function construct($nimi) { } $this->nimi = $nimi; } function puhu() { } echo "Hei, nimeni on {$this->nimi}! <br>"; $aapeli = new Henkilo("Aapeli"); $maija = new Henkilo("Maija"); $aapeli->puhu(); $maija->puhu();?>
Muuttakaa äskeistä Muuttakaa Henkilo luokkaa jotta siinä on etunimi, sukunimi ja ika attribuutit voitte poistaa nykyisen nimi attribuutin Muuttakaa konstruktoria, jotta uuden olion voi luoda tällaisella käskyllä $mina = new Henkilo('John', 'Doe', 1234); Muuttakaa puhu metodia jotta se tulostaisi äskeisillä arvoilla Hei, nimeni on Doe, John Doe. Olen 1234 vuotta! Luokaa muutamia eri olioita (new käskyllä.)
Konstruktori eri kielissä in Java a constructor just has the same name as the class python method name is new in ruby the constructor method name is initialize
Eri ohjelmointikielissä PHP $fred = new Customer();
Olioiden suunnittelu, UML
Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat)
Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat) Kuvan luokan jokaisella oliolla on balance, eri olioissa (ilmentymissä) on tieto mikä tämä on (500$, -50$ tai muu)
Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat) Huom! Kuvan metodeja ei tarvitse vielä tehdä! Luokaa luokka ja sen ilmentymät (oliot) Syöttäkää arvot ja tehkää ohjelma joka tulostaa nämä arvot näytölle. Palauttakaa koodinne Markukselle sähköpostitse.
"Framework" kotitehtävä Framework Kerro mitkä ovat tavoitteesi ensi kerraksi. Ensi kerralla katsotaan taas edistymistänne.
Ensi kerralla mm. Enkapsulointi / näkyvyys Private / protected / public / static Perintä Extends, child, parent