Ohjelmointikielet ja -paradigmat 5op Markus Norrena
Kotitehtävistä: Pankkitilit kotitehtävä 7 Toteuttakaa kotitehtävä 1:n kuvan mukaiset metodit open(), close(), deposit(), withdraw(), joilla voi Nostaa rahaa tililtä, Lisätä rahaa tilille, Sulkea ja aukaista tili Edellinen "mallivastaus": kotiteht06b.php Käyttäkää vastauksessanne kapselointia (private / protected / public) Kuva (UML-kaavio).
Kotitehtävistä: Pankkitilit kotitehtävä Miltä tuntui? Mitä syntyi? Katsotaan vastauksianne ja tarvittaessa yritetään yhdessä saada kaikkien ohjelmat toimimaan. "Mallivastaus": kotiteht07.php
Kotitehtävistä: Frameworkit Raportoikaa vapaasti, mitä syntynyt, oliko ongelmia, mikä on tilanne, oletteko aikataulussa? Mikä on tavoitteenne ensi kerraksi?
Static Static attribuutit ja metodit rikkovat sen mitä ollaan tähän asti opittu olioista ja ilmentymistä. Koska ovat käytössämme vaikka luokasta ei olisi ilmentymää.
Static <?php class Student { static $total_students=0;?> static function welcome_students($var="hello") { echo "{$var students."; Static attribuutti ja metodi on käytössämme vaikka luokasta ei olisi ilmentymää.
Static Static on sidottu luokkaan itseensä, eikä ilmentymään (olioon) Siksi näihin viitataan eri tavalla (pitää määritellä minkä luokan mikä static). Näin: echo Luokka::$attribuutti; echo Student::$total_students; Static metodeilla ja attribuuteilla ei voi käyttää $this -avainsanaa.
Static <?php class Student { static $total_students=0; static function welcome_students($var="hello") { echo "{$var students."; // Ei näin: // $student = new Student(); // echo $student->total_students; echo Student::$total_students."<br />"; echo Student::welcome_students()."<br />";?>
Static Milloin käyttää static:ia? Esim jos kyse ei ole ilmentymästä kuten yhdestä tietystä oppilaasta, vaan esimerkiksi kaikkien oppilaiden kokonaismäärästä. Tai kenties tarvitsemme jotain luokkaan liittyvää tietoa, esim. lueteltuna eri mahdolliset tutkinnot Perustutkinto / Jatkotutkinto / Täydennyskoulutus Static:na nämä olisivat meille aina saatavilla
Static kokeilua! Kokeilkaa äskeistä esimerkkiä Lisätkää koodiin Static lisää_opiskelija -tyyppinen metodi, joka kutsuttaessa lisää opiskelijamäärää yhdellä.
<?php Static kokeilu, mallivastaus class Student { static $total_students=0; static public function add_student($var=1) { Student::$total_students+=$var; static function welcome_students($var="hello") { echo "{$var students."; echo Student::$total_students."<br />"; echo Student::welcome_students()."<br />"; echo Student::welcome_students("Greetings")."<br />"; Student::add_student(); echo Student::$total_students."<br />";?>
Static ja perintä Static muttujat eivät monistu perinnässä, vaan aliluokat viittaavat samoihin arvoihin Tehtävä: tehkää aliluokka (extends sanalla) ja kokeilkaa miten static muuttujat käyttäytyvät aliluokissa.
<?php Static ja perintä esimerkki // static variables are shared throughout inheritance. class One { static $foo; class Two extends One { class Three extends One {?> One::$foo = 1; Two::$foo = 2; Three::$foo = 3; echo One::$foo; // 3 echo Two::$foo; // 3 echo Three::$foo; // 3
Yhteenveto: "working with the static modifier" Static: the value / attribute is around even when there is no instance Static methods and attributes are tied to the class itself, not to the instance Instead of arrows use :: (Student::$total_students) and $ Keep static methods separated from other methods Static variables are shared in inheritance Could be used for example to count how many instances exist of something
Scope Resolution Operator :: Tupla kaksoispisteet :: Paamayim Nekudotayim Esim. alla viittaukset kahteen eri muuttujaan Student::$total_students = 20; $total_students = 20; Ensimmäinen on luokan static muuttuja, toinen yleinen muuttuja.
Kielestä Static attribute Luokkamuuttuja (tai staattinen attribuutti) Static method :: Luokkametodi (tai staattinen metodi) Scope resolution operator (Suomeksi??) Javassa pelkkä piste: System.out.println(Student.total_students); PHP: echo Student::$total_students;
self ja parent Self Self viittaa nykyiseen luokkaan (jossa käsky on) self::$a Parent Viittaa vanhempi-luokkaan, eli ylemmän tason luokassa olevaan attribuuttiin tai metodiin parent::$a
:: -tehtävä Kokeilkaa self ja parent viittauksia, esim: self::$a parent::$a Hae tarvittaessa lisää tietoa verkosta.
:: esimerkki Tulostaa: 1 11 1 11 <?php class A { static $a=1; static function modified_a() { return self::$a + 10; class B extends A { static function attr_test() { echo parent::$a; static function method_test() { echo parent::modified_a(); echo B::$a. "<br />"; echo B::modified_a(). "<br />"; echo B::attr_test()."<br />"; echo B::method_test(). "<br />";?>
parentesimerkki ilman staticia Tulostaa mitä? <?php class A { public function hello() { echo "Hello<br />"; class B extends A { public function hello() { echo "*******"; parent::hello(); echo "*******"; $object = new B(); $object->hello();?>
Vielä esimerkki mietittäväksi class ParentClass { function test() { self::who(); // will output 'parent' $this->who(); // will output 'child' function who() { echo 'parent'; class ChildClass extends ParentClass { function who() { echo 'child'; $obj = new ChildClass(); $obj->test();
:: and Constructors Constructor = do things that need to be done before the class is in use function construct() { Esimerkki joka laskee ilmentymien (opiskelijoiden) määrää:
:: and Constructors <?php class Student { public $opiskeluvuosi; static $total_students=0; function construct() { $this->opiskeluvuosi = 1; self::$total_students++; $opiskelija = new Student(); echo $opiskelija->opiskeluvuosi."<br />"; echo Student::$total_students."<br />";?>
:: and Constructors Soveltakaa äskeistä konstruktori esimerkkiä omaan koodiinne: Lisätkää edelliseen omaan ohjelmaanne laskuri joka laskee montako ilmentymää (oliota) luokasta on olemassa
Photo Gallery Project Siinä olioteoria, nyt kokeillaan käytännössä. Aloitetaan täysin oliopohjaisen kuvagallerian teko. Kuvagallerian toiminnallisuutta:
Photo Gallery Project Public / Admin sides Pagination (next / prev) thumbnails Full size images Comments Log in Upload images Delete images Review/delete somments
Luokkien hahmotelmani User Käyttäjätunnus / kokonimi, salasana, oikeudet, omistamat kuvat ja kommentit, kirjautuminen (log in), Photograph Lisää / poista kuva, kenen lisäämä, milloin, tila (näkyvissä?) Comments Teksti, kenen kirjoittama, milloin, tila (näkyvissä / poistettu) Database Aukaisee yhteyden, suorittaa haut, jne. Pagination Näyttää kuvat: thumbnails / isot, jne.
Kotitehtävä 8 : Photo Gallery - UML Piirtäkää UML-kaavio tarvittavista luokista, attribuuteista ja metodeista Suunnitelkaa samalla miten valokuvagalleria-ohjelmanne voisi toimia UML-kaavio tai jokin yhtä selkeä esitystapa Tarkoitus on että joudutte miettimään nyt kokonaisuutta Edellisten kalvojen ohjelmamäärittelyjen mukaan! Palauttakaa sähköpostitse.
Oliosuunnittelusta Yksi tapa suunnitella olioita on miettiä tietokantaa. Jokaiselle tietokantataululle luodaan yleensä oma olionsa. "Data comes first" on yleinen olioajatusmalli OOP = data before action Procedural programming = actions first Class = data type definition Object / instance = piece of data
Oliosuunnittelusta Tehtävä: Hakekaa verkosta olioohjelmoinnin suunnitteluvinkkejä Kerätkää muutamia, niin keskustellaan niistä kohta.
Kotitehtävä framework Varaudu esittelemään luokassa ensi kerralla edistymistäsi.