Ohjelmoin*kielet ja - paradigmat 5op Markus Norrena
Tiedonhankintatehtävä Ryhmissä, valmistelkaa muutaman kalvon esitys luokassa seuraavista aiheista 1. Proseduraalinen ohjelmointi suhteessa olioohjelmointiin 2. MVC-arkkitehtuuri 3. Olio-ohjelmointi PHP:ssä 4. Olio-ohjelmointi JavaScriptissä
Tärkeimmät ohjelmointiparadigmat Proseduraalinen (lausekielinen) ohjelmointi Olio-ohjelmointi Funktionaalinen ohjelmointi Logiikkaohjelmointi Rinnakkaisohjelmointi Mitä tarkoittaa paradigma?
Proseduraalinen ohjelmointi / yleistä Ohjelman rakenne jäsennetään toiminnasta käsin. Periaate: Suunnittelussa keskeisenä asiana, miten ohjelma jaetaan toiminnallisiin osiin. Kontrolli: Ohjelmaa suoritetaan lause kerrallaan, apuna ehtoja ja toistolauseet (linearisesti). http://fi.wikipedia.org/wiki/ Proseduraalinen_ohjelmointi
Olio-ohjelmointi / yleistä Tärkeimmät kielet C++ ja Java Tullut erittäin yleiseksi, koska luokkien ja olioiden avulla voidaan helposti mallittaa monien reaalimaailman ongelmien käsitteistöä. Laajat luokkakirjastot helpottavat uusien sovellusten rakentamista.
Olio-ohjelmointi / yleistä Pääsee oikeuksiinsa vasta silloin, kun koodin määrä on suuri. Kontrolli etenee siten, että luokkien metodit kutsuvat toisiaan. Pääohjelma ei kontrolloi kokonaisuutta, vaan sitä tarvitaan lähinnä käynnistymiseen. http://fi.wikipedia.org/wiki/olio-ohjelmointi Mitä ovat luokka, olio, metodi?
Funktionaalinen ohjelmointi / yleistä Ohjelman rakenne jäsennetään toiminnasta käsin. Kaikki toiminnot tehdään funktiokutsujen avulla, ei siis suoriteta peräkkäisiä lauseita Keskeisin kieli LISP (v. 1960) ja sen eri murteet (mm. Common Lisp, Scheme) ja Haskell
Funktionaalinen ohjelmointi / yleistä Rekursio erittäin tärkeää, Toisto tehdään yleensä rekursion avulla http://fi.wikipedia.org/wiki/ Funktionaalinen_ohjelmointi Mitä on rekursio?
Logiikkaohjelmoin* Kuvaa maailman faktoina ja faktojen välisinä suhteina. Esimerkiksi "Ville on Kallen isä, Matti on Villen isä, X on Y:n poika, jos Y on X:n isä" kuvataan prolog-kielellä näin: isa (ville, kalle). isa (matti, ville). poika (X, Y) :- isa (Y, X). http://fi.wikipedia.org/wiki/logiikkaohjelmointi
Rinnakkaisohjelmoin* tehdä useampaa asiaa samanaikaisesti Oikein tehtynä nopeuttaa ja tehostaa ohjelmia. Tällainen vaikutelma yhtäaikaa tapahtuvasta suorituksesta saadaan aikaan ns. säikeillä (thread) Esimerkki: ajatelkaa yhtä prosessoria videoprojektorina joka näyttää miljoona kuvaa sekunnissa ja johon jonottaa sata eri elokuvaa samaan aikaan näytettäviksi.
Rinnakkaisohjelmoin* Tähän kuuluvat myös hajautetut järjestelmät, jotka ovat ohjelmia ja järjestelmiä jotka koostuvat itsenäisistä, keskenään kommunikoivista osista. Esimerkki: tilisiirto tai pankkiautomaatit.
PHP - kertausta Proseduraalista ohjelmoin1a
Alkuvalmistelut - phpinfo Virkistetään perus-php-muistia: Luo PHP-tiedosto jossa on ainakin tämä käsky: phpinfo(); Suorita php-koodi, eli katsokaa sitä selaimessa
Kaikki algoritmit ja siis myös kaikki ohjelmat, voidaan ilmaista näiden kolmen perusrakenteen avulla: Peräkkäisyys Peräkkäisyys tarkoittaa, että algoritmin käskyt suoritetaan esiintymisjärjestyksessä ellei valinta- tai toistolauseella toisin määrätä Valinta if else jos puussa on rahaa, ota sitä sieltä, muuten hanki töitä Toisto poimi rahaa puusta - toista niin kauan kuin puussa on rahoja
Kertausta: valinta Ehtolause <?php $a = 2; if ($a == 2) { echo "a on kaksi <br />"; } else { echo "a ei ole kaksi!<br />"; }?>
Kertausta: toisto While - silmukka <?php $i = 1; while ($i <= 10) { }?> echo $i++. "<br>"; /* $i tulostetaan ensin ja sitten siihen lisätään 1*/
Kertausta: taulukkomuuttujat <?php $numbers = array(1,2,3,4,5,6); print_r($numbers);?> echo $numbers[0]; // 1 echo $numbers[1]; // 2
Kertausta: taulukkomuuttujat <?php Eri tapa ilmaista sama asia: $numbers[] = 1; $numbers[] = 2; $numbers[] = 3;... print_r($numbers);?> echo $numbers[0]; // 1 echo $numbers[1]; // 2
<?php $a = 'Kevin'; $b = 'Mary'; $c = 'Joe'; $d = 'Larry'; $e = 'Audrey'; Kertausta: muuttujat 2 $students = array('a', 'c', 'e'); foreach($students as $seat) { }?> echo $$seat. "<br />"; Mitä tämä tekee ja miksi?
Funktiot Php:ssä Funktio on kuin ohjelma ohjelman sisällä PHP:llä on iso funktio-kirjasto mm. aakkostus-, sähköpostinlähetys-, tietokantafunktioita ja muita Voi myös itse tehdä omia funktioita itselleen Silloin ei tarvitse kirjoitaa samaa koodia monta kertaa, vaan teet yhden funktion ja sen jälkeen kutsut funktiota aina tarvittaessa
Funk*ot, esimerkki 1. <?php function writemsg(){ echo "Hello world!"; } writemsg(); writemsg();?> Aloitat määrittelemällä funktiollesi nimen Nimessä ei saa olla välilyöntejä Myöhemmin koodissa kutsut funktiota sen nimellä
Funktio voi myös ottaa syötteen (parametrin), tämä määritellään sen otsikossa (eli heti nimen perään) Syöte on muuttuja jota funktio sitten käsittelee <?php function addnum($first, $second) { } $newnum = $first + $second; return $newnum; echo addnum(4,5); echo "<br><br>"; echo addnum(4, addnum(5,6));?> Return palauttaa arvon
Jos funktiossa halutaan käyttää funktion ulkopuolella olevia muuttujia, ne on määriteltävä global-avainsanan avulla Seuraavassa esimerkissä markan ja euron suhde haetaan funktion ulkopuolisesta muuttujasta <?php $suhde = 5.94573; function euroiksi($markat) { global $suhde; return round($markat / $suhde, 2); } echo "100 markkaa on ". euroiksi(100). " euroa.";?>
Funktiot, vielä esimerkki <?php function increment($var = 0){ $var++; } return $var; $a = 2; $a = increment(4); echo "a: ". $a."<br />";?>
Kertausta: loogiset operaacorit = sijoitus == vertaa!= eri kuin 2!= 5 <> eri kuin < <= > >= and && 5=2 or 1=2
Kertausta: teks*jonojen käsicely <?php $kokonimi=" markus norrena \n"; echo "Alussa: ". $kokonimi. "."; //explode -- Split a string by string $nimet = explode(" ", $kokonimi); $kokonimi=""; //ucfirst -- Make a string's first character uppercase foreach ($nimet as $nimi) { $kokonimi.= ucfirst($nimi). " "; } //trim -- Strip whitespace (or other characters) from // the beginning and end of a string $kokonimi = trim($kokonimi); echo "Lopussa: ". $kokonimi. ".";?>
Alkuvalmisteluja PHP code checker http://phpcodechecker.com/
Cookies, Evästeet tekniikka käycäjäkohtaisen *edon säilycämiseen pysyvämmin kuin mitä muucujilla on mahdollista KäyCäjän kirjautuminen on voimassa sivulta toiselle, tai verkkokaupassa ostoskorin sisältö säilyy Eväste on pieni *edonmurunen, teks*npätkä, jonka selain tallentaa käycäjän koneelle Evästeet liicyvät aina yhteen palveluun, ja niillä on *ecy voimassaoloaika
Eväste luodaan PHP:n setcookie- funk*olla Ensimmäinen parametri on nimi, jolla evästeeseen myöhemmin viitataan Toinen parametri on evästeen arvo, tallennecava *eto Kolmas parametri kertoo, kuinka kauan eväste säilyy käycäjän koneella Jos kolmaca parametria ei ole annecu, eväste on voimassa istunnon ajan eli niin kauan kuin selainikkunaa ei suljeta <?php //luo evästeen nimi, jonka arvo on Juho setcookie("nimi", "Juho"); //tämä eväste on voimassa seuraavat 10 minuuttia setcookie("auto", "Honda", time() + 60 * 10);?>
Evästeen poistaminen tapahtuu samalla funk*olla muca nyt arvo on tyhjä merkkijono Ja voimassaoloaika on asetecava menneisyyteen (joca poistaminen onnistuu oikein kaikilla selaimilla) Tämä skrip* poistaa ne evästeet, jotka edellinen skrip* loi: <?php //poistetaan edellisessä esimerkissä luodut evästeet setcookie("nimi", ""); setcookie("auto", "", time() - 60 * 10);?>
Huom! Evästeet on luotava ja poistecava ennen kuin mitään muuta kirjoitetaan sivulle, koska ne kulkevat sivun otsikko*etojen mukana Evästeiden lukeminen on mahdollista $_COOKIE- taulukon kauca
Seuraava skrip* tulostaa evästeiden sisältämät *edot <?php //haetaan aikaisemmassa esimerkissä luodut evästeet muuttujiin $nimi = $_COOKIE["nimi"]; $auto = $_COOKIE["auto"]; //tulostetaan evästeiden tiedot echo "{$nimi}n auto on $auto";?> Jos odotetaan kymmenen minuusa, auton merkki ei enää näy sivulla Jos selain avataan uudestaan, nimi häviää
Session / Istunnot Istunnoissa palvelun käycäjälle muodostetaan yksilöllinen id- tunnus, joka joko tallennetaan evästeeseen tai kulkee URL:n mukana Palvelimelle luodaan id- tunnusta vastaava *edosto, johon istunnossa käytetyt muucujat tallentuvat
Istunto aloitetaan session_start- funk*olla Tämän jälkeen istunnon muucujia käsitellään $_SESSION- taulukon kauca Esimerkki määricää kaksi istuntomuucujaa: <?php //aloitetaan istunto session_start(); //määritetään istuntomuuttujat $_SESSION["nimi"] = "Markus"; $_SESSION["auto"] = "Jopo";?>
MuuCujien lukeminen onnistuu suoraan samasta taulukosta skrip* lukee ja tulostaa edellisessä esimerkissä määritetyt istuntomuucujat: <?php //aloitetaan istunto session_start(); //luetaan istuntomuuttujat $nimi = $_SESSION["nimi"]; $auto = $_SESSION["auto"]; //tulostetaan tiedot echo "$nimi:n auto on $auto";?>
IstuntomuuCujat voidaan 'poistaa' määricelemällä ne tyhjiksi $_SESSION["nimi"]=""; $_SESSION["auto"]=""; Kaikki istuntomuucujat voi tyhjentää käskyllä: session_unset(); Tässä tapauksessa istunto on yhä olemassa Koko istunnon voi lopecaa käskyllä: session_destroy();
Kotitehtävä 1 Tee kirjautumisjärjestelmä ilman tietokantaa. Sivustolle jolla on vähintään 2 eri sivua. Kysyy tunnusta ja muistaa kirjautumisen ettei kysy uudestaan siirryttäessä sivulta toiselle. Ei päästä millekään sivulle ellei ole oikeaa salasanaa. Käytä funktioita koodissasi (hyvä koodaustapa). Palauta koodisi ja linkki sivulle Markukselle sähköpostitse. (Älä käytä palvelimen htaccess tiedostoa tähän.)
Kotitehtävä 2 Tutustu seuraaviin frameworkeihin Muodosta niistä käsitys itsellesi, ja valitse kaksi joita mieluiten lähtisit kokeilemaan Symfony CodeIgniter Phalcon Laravel Node.js CoffeeScript AngularJS
Ensi kerta on etäkerta Uuden organisaation kehittämispäivän takia ensi kerran luento on peruttu Siksi hoidamme etänä pari juttua mitä muuten olisimme keskustelemalla hoitaneet
Kotitehtävä 2 -jatko Valitse yksi framework itsellesi Korkeintaan kahdella saa olla sama valinta! Merkitse omasi tänne: http://doodle.com/8qef66he9zf4s63p Symfony, CodeIgniter, Phalcon, Laravel, Node.js, CoffeeScript, AngularJS
Kotitehtävä 3 Asenna valitsemasi frameworkki ja tee "hello world" tasoinen koe sillä. Voit käyttää esim. 195.148.97.131 konetta tai XAMPP:ia. KäyCäkää 195.148.97.131 koneella näitä MySQL tunnuksia: Tunnus: okp Salasana: oli9trr3 luokaa itsellenne oma *etokanta sinne hcp://195.148.97.131/phpmyadmin/ Lähetä linkki kokeeseesi Markukselle päivää ennen ensi kerran luentoa (2 viikon päästä).
Seuraavalla tapaamiskerralla Ainakin Tietokannan käyttö PHP:llä (MySQL ja PDO) File Upload esimerkki Katsomme miten Framework kokeilunne ovat menneet Nämä kalvot laitetaan tänne: http://users.metropolia.fi/~norrm/k14/okp/