Ohjelmointikielet ja -paradigmat 5op. Markus Norrena



Samankaltaiset tiedostot
Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

812336A C++ -kielen perusteet,

Capacity Utilization

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

Uusi Ajatus Löytyy Luonnosta 4 (käsikirja) (Finnish Edition)

Mikä yhteyssuhde on?

Olio-ohjelmointi Javalla

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

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

Efficiency change over time

Periytyminen (inheritance)

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

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

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Choose Finland-Helsinki Valitse Finland-Helsinki

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1

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

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

P e d a c o d e ohjelmointikoulutus verkossa

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

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

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

Green Growth Sessio - Millaisilla kansainvälistymismalleilla kasvumarkkinoille?

Other approaches to restrict multipliers

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

Rajapinta (interface)

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

C# olio-ohjelmointi perusopas

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

You can check above like this: Start->Control Panel->Programs->find if Microsoft Lync or Microsoft Lync Attendeed is listed

Javan perusteita. Janne Käki

The CCR Model and Production Correspondence

P e d a c o d e ohjelmointikoulutus verkossa

Olio-ohjelmointi 2. välikoe HYV5SN

Gap-filling methods for CH 4 data

Luokan sisällä on lista

Returns to Scale II. S ysteemianalyysin. Laboratorio. Esitelmä 8 Timo Salminen. Teknillinen korkeakoulu

YHTEYSSUHDE (assosiation)

KOHDELUOKAN MÄÄRITTELY

Operatioanalyysi 2011, Harjoitus 4, viikko 40

anna minun kertoa let me tell you

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

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

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

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

Travel Getting Around

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

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

Statistical design. Tuomas Selander

Tentti: T Ohjelmoinnin peruskurssi, osa 1. Yleistä. Tehtävä 1

KONEISTUSKOKOONPANON TEKEMINEN NX10-YMPÄRISTÖSSÄ

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

Miten koulut voivat? Peruskoulujen eriytyminen ja tuki Helsingin metropolialueella

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

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Alternative DEA Models

Suunnittelumalleja, MVC. Juha Järvensivu 2008

AYYE 9/ HOUSING POLICY

Tilausvahvistus. Anttolan Urheilijat HENNA-RIIKKA HAIKONEN KUMMANNIEMENTIE 5 B RAHULA. Anttolan Urheilijat

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

1. Liikkuvat määreet

Interaktiivinen tarinankerronta

2. Olio-ohjelmoinista lyhyesti 2.1

Ohjelmointi 2 / 2010 Välikoe / 26.3

Metodien tekeminen Javalla

Suihkukoneet 1:73 ja pienemmät. Potkurikoneet 1:72-1:49. Suihkukoneet 1:72-1:49. Potkurikoneet 1:35 ja suuremmat. Suihkukoneet 1:35 ja suuremmat

RINNAKKAINEN OHJELMOINTI A,

make and make and make ThinkMath 2017

Data protection template

ict02d Osio2- luento 3 Olio-ohjelmointi: Luokkien kirjoittaminen

Ohjelmoinnin peruskurssien laaja oppimäärä

Hankkeiden vaikuttavuus: Työkaluja hankesuunnittelun tueksi

F-SECURE TOTAL. Pysy turvassa verkossa. Suojaa yksityisyytesi. Tietoturva ja VPN kaikille laitteille. f-secure.com/total

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

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

8. Oliot 123. Kuinka luokkia luodaan ja olioita saadaan aikaan. Kuinka luodaan ja käsitellään ominaisuuksia ja metodeja

Kertaus: yleistys-erikoistus ja perintä

Olio-ohjelmointi Syntaksikokoelma

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

BLOCKCHAINS AND ODR: SMART CONTRACTS AS AN ALTERNATIVE TO ENFORCEMENT

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

TIE Ohjelmistojen suunnittelu

Bounds on non-surjective cellular automata

Miksi Suomi on Suomi (Finnish Edition)

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

Java kahdessa tunnissa. Jyry Suvilehto

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

C++11 seminaari, kevät Johannes Koskinen

1. Olio-ohjelmointi 1.1

Käyttöliittymät II. Käyttöliittymät I Kertaus peruskurssilta. Keskeisin kälikurssilla opittu asia?

Web Services tietokantaohjelmoinnin perusteet

Huom. tämä kulma on yhtä suuri kuin ohjauskulman muutos. lasketaan ajoneuvon keskipisteen ympyräkaaren jänteen pituus

Strategiset kyvykkyydet kilpailukyvyn mahdollistajana Autokaupassa Paula Kilpinen, KTT, Tutkija, Aalto Biz Head of Solutions and Impact, Aalto EE

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

Transkriptio:

Ohjelmointikielet ja -paradigmat 5op Markus Norrena

Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat)

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.

Kotitehtävä 6:sta Miltä tuntui? Mitä syntyi? Kertokaa ellette saaneet koodia toimimaan, niin yritetään yhdessä saada kaikkien ohjelmat toimimaan. "mallivastaus": kotiteht06b.php

Inheritance / perintä Luokka voi periä toisen luokan ominaisuuksia (metodeja, attribuutteja) Perintä on tavallinen olio-ohjelmoinnin tekniikka, jossa uuden luokan lähtökohtana on aiemman luokan sisältö (parent child luokat). Periytyvyys = uusi luokka saa perusominaisuutensa toisesta luokasta ja siihen lisätään jotain

Inheritance / perintä "Inheritance: class definition with the word extends" esim: class CompactCar extends Car { }

Harjoitus Tehkää uusi luokka Auto joka sisältää attribuutit pyöriä (montako pyörää autossa on), jonka oletusarvo on 4 ovia (montako ovea on), jonka oletusarvo on 4 Ja metodin pyöriäovia (palauttaa auton pyörien ja ovien määrän yhteenlaskettuna)

Esim. <?php class Auto { public $pyöriä = 4; public $ovia = 4; } function pyöriäovia() { } return $this->pyöriä + $this->ovia;?>

Kokeilkaa toimivuutta <?php $car1 = new Auto(); echo $car1->pyöriä."<br />"; echo $car1->ovia."<br />"; echo $car1->pyöriäovia()."<br />";?>

Harjoituksen jatko Tehdään Auto-luokalle perillinen (lapsiluokka) "PieniAuto" Joka perii Auto luokan ominaisuudet Mutta jossa on vain 2 ovea

Esim. <?php class PieniAuto extends Auto { public $ovia= 2; }?>

<?php $car1 = new Auto(); $car2 = new PieniAuto(); Kokeillaan echo $car1->pyöriä."<br />"; echo $car1->ovia."<br />"; echo $car1->pyöriäovia()."<br />"; echo "<br />"; echo $car2->pyöriä."<br />"; echo $car2->ovia."<br />"; echo $car2->pyöriäovia()."<br />"; echo "<br />";?>

Kokeillaan työkaluja <?php echo "Auto parent: ".get_parent_class('auto')."<br />"; echo "PieniAuto parent: ".get_parent_class('pieniauto')."<br />"; echo is_subclass_of('auto', 'Auto')? 'true' : 'false'; echo "<br />"; echo is_subclass_of('pieniauto', 'Auto')? 'true' : 'false'; echo "<br />"; echo is_subclass_of('auto', 'PieniAuto')? 'true' : 'false'; echo "<br />"; echo is_subclass_of($car2, 'Auto')? 'true' : 'false';?>

Milloin käyttää perintää? Inheritance is a rule a car is a vehicle a bus is a vehicle a motorcycle is a bus an employee is a person

Perinnän estäminen: final ja const A parent class can prevent its methods from being overridden by its children with the final keyword class Vehicle { } final public function drive() { return "I'm drivin' here!"; }

Perinnän estäminen: final ja const We can set variables that don't change, these are prefixed with the const keyword (short for constant) class Immortal extends Person { } // Immortals never die! const alive = true;

Perinnän estäminen: final ja const PHP lets us set constants on a class-by-class basis This means we can have many constants with the same name, so long as they're all in different classes. We need to have some way of specifying which class we mean. We can use ::, the scope resolution operator, to specify which constant we want, like so:

Perinnän estäminen: final ja const class Immortal extends Person { // Immortals never die! } const alive = true; if (Immortal::alive) { echo "I live forever!"; } // Note that constants do not start with $.

Kapselointi (encapsulation) "Olion sisäisiin muuttujiin ei päästä suoraan käsiksi olion ulkopuolelta, jolloin ohjelmointivirheiden määrä vähenee." Olio-ohjelmointi mahdollistaa luotettavampaa koodia rajoittamalla sisäistä pääsyä attribuutteihin ja metodeihin Ns. "Access modifiers" Private / protected / public

Access modifiers Setting access to methods and attributes: public / private / protected Public = accessible from everywhere Private = only accessible internally from within this class Protected = accessible from this class or from its subclass Tämä ei siis koske ihmisten pääsyä koodiin, vaan koodin sisäistä rajoittamista

Kokeillaan class Example { public $a=1; protected $b=2; private $c=3; } function show_abc() { } echo $this->a; echo $this->b; echo $this->c; $example = new Example(); echo "public a:". $example->a."<br />"; //jne. b & c $example->show_abc();

Harjoitus Lisätkää edelliseen esimerkkiin perillinen, ja kokeilkaa mihin sillä on pääsy.

Kapselointi (encapsulation) Termillä tarkoitetaan myös "Datan ja käyttäytymisen kokoaminen yhteen yksikköön, olioon." siis pakataan asioita yhteen ja rajataan näkyvyys ja pääsy vain välttämättömään Johtaa parempaan koodiin.

Setters and Getters (design pattern) Setters and Getters (methods) Ei päästä suoraan käsiksi tietoon, vaan kuljetaan sitä mahdollistavan metodin kautta Yleensä kyse attribuuteista tai tietokantapääsystä "Ei päästä suoraan käsiksi rahaan, vaan kuljetaan pankkivirkailijan kautta" Pankkitiliesimerkissä voisi olla setter ja getter jotka tarkistavat onko tilillä tarpeeksi rahaa ennen nostoa Katsotaan esimerkkiä: access_modifiers2.php

access_modifiers2.php class SetterGetterExample { private $a=1; } public function get_a() { } return $this->a; public function set_a($value) { $this->a = $value; } $example = new SetterGetterExample(); // restricted: echo $example->a."<br />"; echo $example->get_a()."<br />"; $example->set_a(15); echo $example->get_a()."<br />";

Pankkitilit kotitehtävä 7 Toteuttakaa kotitehtävä 6:n kuvan mukaiset metodit open(), close(), deposit(), withdraw(), joilla voi Nostaa rahaa tililtä, Lisätä rahaa tilille, Sulkea ja aukaista tili Edellinen "mallivastaus" kurssisivulla Käyttäkää vastauksessanne kapselointia (private / protected / public) Kuva (UML-kaavio) :

Pankkitilit kotitehtävä

"Framework" kotitehtävä Miten etenee? Mitkä tavoitteet ensi kerraksi?