Ohjelmointikielet ja -paradigmat 5op. Markus Norrena



Samankaltaiset tiedostot
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

812336A C++ -kielen perusteet,

Mikä yhteyssuhde on?

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

9. Periytyminen Javassa 9.1

2. Olio-ohjelmoinista lyhyesti 2.1

Olio-ohjelmointi Javalla

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Periytyminen (inheritance)

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Javan perusteita. Janne Käki

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

9. Periytyminen Javassa 9.1

4. Olio-ohjelmoinista lyhyesti 4.1

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

P e d a c o d e ohjelmointikoulutus verkossa

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Ohjelmoinnin peruskurssien laaja oppimäärä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

1. Olio-ohjelmointi 1.1

AYYE 9/ HOUSING POLICY

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Encapsulation. Imperative programming abstraction via subprograms Modular programming data abstraction. TTY Ohjelmistotekniikka

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmointi 2 / 2010 Välikoe / 26.3

public static void main (String [] args)

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

RINNAKKAINEN OHJELMOINTI A,

Luokan sisällä on lista

Listarakenne (ArrayList-luokka)

Rajapinta (interface)

Ohjelmoinnin peruskurssien laaja oppimäärä

Luokat ja oliot. Ville Sundberg

Java kahdessa tunnissa. Jyry Suvilehto

Other approaches to restrict multipliers

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Statistical design. Tuomas Selander

Oliot viestivät metodeja kutsuen

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

1 Tehtävän kuvaus ja analysointi

JUnit ja EasyMock (TilaustenKäsittely)

815338A Ohjelmointikielten periaatteet

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Kertaus: yleistys-erikoistus ja perintä

15. Ohjelmoinnin tekniikkaa 15.1

UML Luokkakaavio 14:41

C# olio-ohjelmointi perusopas

Java-API, rajapinnat, poikkeukset, UML,...

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Ohjelmoinnin jatkokurssi, kurssikoe

Choose Finland-Helsinki Valitse Finland-Helsinki

Sisällysluettelo Table of contents

KOHDELUOKAN MÄÄRITTELY

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

15. Ohjelmoinnin tekniikkaa 15.1

C++11 seminaari, kevät Johannes Koskinen

1. Liikkuvat määreet

812347A Olio-ohjelmointi, X Reflektiivisyys

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Ohjelmoinnin peruskurssien laaja oppimäärä

Information on preparing Presentation

P e d a c o d e ohjelmointikoulutus verkossa

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Apuja ohjelmointiin» Yleisiä virheitä

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Salasanan vaihto uuteen / How to change password

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

Ohjelmistotekniikan menetelmät, luokkamallin laatiminen

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

19/20: Ikkuna olio-ohjelmoinnin maailmaan

1. SIT. The handler and dog stop with the dog sitting at heel. When the dog is sitting, the handler cues the dog to heel forward.

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Perintä (inheritance)

19. Olio-ohjelmointia Javalla 19.1

Capacity Utilization

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Transkriptio:

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.