Olio-ohjelmointi Suunnittelumallit Observer ja State. 1. Observer (Tarkkailija)
|
|
- Teemu Nurminen
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Olio-ohjelmointi Suunnittelumallit Observer ja State Käyttäytymismallien päätarkoitus on algoritmien toteuttaminen ja vastuiden jakaminen olioiden välillä. Näin ollen käyttäytymismallit kuvaavat luokkien ja olioiden rakenteen lisäksi niiden välisen kommunikoinnin ilmenemismuodot. Ohjelman suorituspolkua on usein vaikea seurata tapauksissa, joihin mallit soveltuvat. Käyttäytymismallit siirtävät huomion suorituspolusta ja antavat ohjelmoijan keskittyä sen sijaan olioiden välisiin suhteisiin. Käyttäytymisluokkamallit jakavat toiminnan eri olioiden vastuulle käyttäen hyväksi perintää. Käyttäytymisoliomalleissa taas sama saadaan aikaan koosteolioita käyttäen. Tässä osassa tutustutaan kahteen oliomalliin: Observer ja State teoksen [Gam] pohjalta. 1. Observer (Tarkkailija) Kun luodaan rakennetta, jossa eri luokkien oliot toimivat yhteistyössä, luokkien välille syntyy usein kytkentöjä. Nämä puolestaan haittaavat luokkien uudelleenkäyttöä. Siitä syystä käytetäänkin erilaisia menetelmiä heikentämään luokkien välisiä kytkentöjä. Yksi tällainen menetelmä on Observer-suunnittelumalli. Tyypillinen tapaus on graafisen käyttöliittymän toteutus ohjelmissa. Jotkin ohjelman luokat käsittelevät sovelluksen dataa ja toiset luokat ohjelman näkymää. Näkymäluokkien välillä on luonnollinen kytkentä, koska niiden on reagoitava datan muutoksiin. Kuitenkin kytkentä halutaan tavallisesti pitää mahdollisimman löyhänä, jotta luokkia voitaisiin käyttää uudelleen. Näkymäluokkien on käyttäydyttävä kuin ne tietäisivät toisistaan, vaikka todellisuudessa näin ei ole. Tämä voidaan toteuttaa Observer-suunnittelumallilla. Suunnittelumallin keskeiset toimijat ovat kohde (subject) ja tarkkailija (observer). Näiden välillä vallitsee ns. julkaise-tilaa-suhde (publish-subscribe). Yhtä kohdetta voi seurata useampi tarkkailija, ne rekisteröityvät tietyn kohteen tarkkailijoiksi ja saavat tällöin ilmoituksen kohteen muutoksista. Yleensä ilmoitetaan ainoastaan siitä, että kohde on muuttunut. Tarkkailijan on tällöin tiedusteltava kohteen tilaa ja päivitettävä itsensä. Tyypillinen Observer-mallin mukainen tilanne esitettiin jo suunnittelumallien johdanto-osassa MVC-mallin yhteydessä Kuva 1. Esimerkki Observer-mallin mukaisesta tilanteesta (Lähde: [Gam]) 1
2 Observer-malli määrittelee näin ollen olioiden välille yksi-moneen riippuvuussuhteen siten, että muutos ensimmäisen olion tilassa aiheuttaa automaattisesti ilmoituksen siitä riippuville olioille. Nämä oliot päivitetään ilmoitettaessa. Edellä olevan tarkastelun perusteella malli soveltuu käytettäväksi, kun halutaan pitää riippuvuussuhde kahden ohjelmassa esiintyvän abstraktion välillä löyhänä kapseloimalla niiden toiminnat eri luokkiin. Toinen käyttökohde ilmenee, kun ohjelman käyttämistä olioista yhden muuttaminen aiheuttaa muutoksen oliojoukossa, jonka kokoa ei ennalta tunneta. Mallia voi käyttää myös, kun oliossa tapahtuvien muutoksen halutaan välittyvän joukolle olioita, joiden identiteettiä ei ennalta tiedetä. Mallin luokkarakenne on esitetty seuraavassa kaaviossa Mallin toimijat ovat Kuva 2. Observer-mallin luokkarakenne (Vrt. [Gam]) Subject (kohde), joka tuntee tarkkailijansa. Tarkkailijoiden määrää ei ole rajoitettu. Tarjoaa rajapinnan tarkkailijoiden lisäämiseksi ja poistamiseksi. Observer (tarkkailija) määrittelee rajapinnan olioille, joille on ilmoitettava kohteen muutoksista. ConcreteSubject säilyttää tilan, jota ConcreteObserver tarkkailee. Lähettää tarkkailijoilleen ilmoituksen tilansa muuttuessa. ConcreteObserver sisältää tilan, joka on pidettävä ConcreteSubjectin tilaa vastaavana. Toteuttaa Observerin määrittelemän rajapinnan tämän aikaansaamiseksi. Observer sallii kohteiden ja tarkkailijoiden muokkaamisen toisistaan riippumatta. Toisin sanoen kohteita voi käyttää uudelleen käyttämättä tarkkailijoita ja päinvastoin. Samoin tarkkailijoita voidaan lisätä tekemättä muutoksia kohteisiin tai muihin tarkkailijoihin. Kohteiden ja tarkkailijoiden välinen suhde on löyhä: Ainoa asia, jonka kohteen tarvitsee tietää tarkkailijoista, on että ne toteuttavat yhteisen yksinkertaisen rajapinnan. Huomaa, että ilmoitus on aina broadcast-tyyppinen: se lähtee kaikille rekisteröityneille tarkkailijoille; on tarkkailijan vastuulla jättää ilmoitus huomiotta tarvittaessa. 2
3 Protokollan yleisyys ja yksinkertaisuus voi myös aiheuttaa ongelmia. Tarkkailijat eivät tiedä toisistaan, joten ne eivät voi myöskään tietää kohteen muuttamisen seurauksia. Näin ollen jotkin kohteeseen vaikuttavat operaatiot voivat aiheuttaa tarkkailijoiden päivitysten kasaantumisen. Protokollassa ei myöskään määritellä, että tarkkailijoille pitäisi ilmoittaa, mistä kohteen muuttuminen johtui. Tämän selvittäminen jää tarkkailijoiden vastuulle. Esimerkki. Esitetään periaatteellinen C++-toteutus mallille. Observer-rajapinta ja Subjectluokka voitaisiin toteuttaa seuraavasti. // Tarkkailijoiden kantaluokka class Observer { virtual ~Observer(){; virtual void update(subject* changedsubject) = 0; ; class Subject { virtual ~Subject(){; virtual void attach(observer*); virtual void detach(observer*); virtual void notify(); private: std::list<observer*> observers; ; // Tarkkailijan lisääminen void Subject::attach (Observer* o) { observers.push_back(o); // Tarkkailijan poistaminen void Subject::detach (Observer* o) { observers.remove(o); // Tarkkailijoille ilmoittaminen void Subject::notify () { std::list<observer*>::iterator iter; for (iter = observers.begin(); iter!= observers.end(); iter++) { (*iter)->update(this); 3
4 Edellä on tarkkailijoiden säiliönä käytetty C++:n kokoelmaa list, josta alkio voidaan poistaa sen remove-metodilla. Toteutuksessa luokka Subject perittäisiin johonkin hyödylliseen luokkaan, joka ilmoittaa tarkkailijoilleen: class ConcreteSubject : public Subject { ; // Luokan koodia // Metodi joka aiheuttaa ilmoituksen tarkkailijoille void changestate(); void ConcreteSubject::changeState(){ // Muutos olion tilassa notify(); Tarkkailijat perivät abstraktin Observer-luokan: class ConcreteObserver : public SomeClass, public Observer { // Luokan koodia ; // Metodi, joka suoritetaan, kun saadaan ilmoitus void update(subject *changedsubject); void ConcreteObserver::update(Subject *changedsubject){ // Kysytään parametriolion tila ja // tehdään tarvittavat operaatiot Käsitellään seuraavaksi hieman mallin toteuttamista. Yleensä tarkkailtava olio säilyttää listaa tarkkailijoistaan jossakin tietorakenteessa, esimerkiksi edellä käytetään C++:n standardikirjaston list-kokoelmaa. Jos tarkkailijoita on vähän ja tarkkailtavia paljon, voidaan tilan säästämiseksi tehdä jokin assosiatiivinen hakumenetelmä. Voidaan esimerkiksi käyttää hash-taulukkoa tallentamaan tarkkailijoita. Useamman kohteen tarkkailu onnistuu, kun tarkkailtava olio välittää viitteen itseensä update-metodin parametrina, kuten edellisessä esimerkkitoteutuksessa. Tyypillisesti notify-kutsu tehdään, kuten edellisessä esimerkkitoteutuksessakin, tarkkailtavan olion tilaa muuttavissa metodissa. Metodia voivat myös kutsua tarkkailtavan olion asiakkaatkin. Tämä voi olla tehokkaampaa, koska asiakas voi tehdä tarkkailtavaan olioon useita muutoksia ja vasta sitten kutsua notify-metodia. Tämä ratkaisu on hieman epävarmempi, koska tällöin notifykutsut unohtuvat helpommin. Jos ne tehdään jokaisessa tilaa muuttavassa metodissa, tarvittavat notify-kutsut suoritetaan varmasti. Mikäli tarkkailtavia olioita voidaan poistaa, tästä pitää ilmoittaa tarkkailijoille, joiden on reagoitava ilmoitukseen asianmukaisesti. Muuten tarkkailijaan voi jäädä esimerkiksi viitteitä tuhottuihin olioihin. Ilmoituksen käsitteleminen toteutetaan usein niin, että ilmoituksen saaja tiedustelee ilmoittajan tilaa ja toimii sitten tämän tilan mukaisesti. Siksi on varmistettava, että kohteen sisäisen tila on kunnossa ennen ilmoitusta. 4
5 Kielissä, jotka eivät tue moniperiytymistä, voi mallin toteutus olla joissakin tapauksissa hankalaa. Esimerkiksi Smalltalkissa onkin kaikkien luokkien kantaluokassa sekä tarkkailijan että tarkkailtavan rajapinta. Näin ollen jokainen olio voi toimia sekä tarkkailijana että tarkkailtavana. Observer-mallin yleiskäyttöisyys ilmenee siitäkin, että myös Java-kieli tukee suoraan Observersuunnittelumallia, Javassa on määritelty rajapinta Observer, jossa on yksi metodi void update(observable o, Object arg) Tätä metodia kutsutaan, kun tarkkailtava kutsuu ilmoitusmetodiaan. Tarkkailtaville olioille on määritelty luokka Observable, jolla on mm. seuraavat metodit public void addobserver(observer o) Lisää tarkkailijan siihen joukkoon, joille ilmoitetaan. public void deleteobserver(observer o) Poistaa tarkkailijan ilmoituksen saajien joukosta. public void notifyobservers() Ilmoittaa kaikille tarkkailijoille public void notifyobservers(object arg) Ilmoittaa kaikille tarkkailijoille ja lähettää parametrin arg protected void setchanged() Asettaa tarkkailtavan olion muutettuun tilaan protected void clearchanged() Poistaa tarkkailtavan olion muutetun tilan Näitä luokkia käyttämällä voidaan toteuttaa Observer-mallia käyttäviä ohjelmia. 5
6 2. State State-suunnittelumallia käytetään, kun halutaan luoda luokka, joka muuttaa käyttäytymistään sisäisen tilansa mukaan. Usein kohdataan tilanne, jossa luokan käyttäytyminen muuttuu sen muuttujien arvojen konfiguraation mukaan. Tämä johtaa monesti koodiin, jossa on mutkikkaita ehto- ja valintarakenteita. State-suunnittelumallin avulla tällaisista pyritään pääsemään eroon. Tilanne korjataan niin, että luokka sisältää jäseninään usean erityyppisen luokan olioita ja pyyntö välitetään tilanteen mukaan sillä hetkellä aktiiviseen osaolioon. Suunnittelumallin tarkoitus on siis luoda olio, jonka käyttäytyminen muuttuu sen sisäisen tilan mukaan niin, että olio ikään kuin näyttää vaihtavan luokkaansa. Otetaan esimerkiksi palvelinsovellus, joka palvelee yhtä asiakasta kerrallaan. Tällöin palvelin voi olla kolmessa tilassa: 1. Kuuntelemassa asiakkaiden palvelupyyntöjä. 2. Palvelemassa asiakasta 3. Suljettu Jokaisessa tilassa palvelin vastaa pyyntöihin (esimerkiksi palvelun aloittamispyyntö ja lopettamispyyntö) eri tavalla. Palvelimen tilakaavio voisi olla esimerkiksi Palvelinluokka voidaan tällöin suunnitella seuraavasti: Kirjoitetaan erillinen abstrakti tilaluokka, jonka aliluokkia ovat eri tilaluokat, jotka toteuttavat palvelupyynnöt sopivasti. Palvelinluokka puolestaan pitää jäsenmuuttujanaan yllä kuhunkin tilaan sopivaa tilaluokan oliota. Näin palvelimelle osoitettu pyyntö ohjautuu aina oikean tyyppiselle tilaoliolle, joka suorittaa pyynnön. Suunnittelumalli soveltuu luontaisesti kahteen tapaukseen: 1. Olion käyttäytyminen riippuu sen tilasta ja tätä tilasta riippuvaa käyttäytymistä on muutettava ajon aikaisesti. 2. Luokan koodissa on laajoja valintarakenteita, joissa ohjataan olion toimintaa sen tilan mukaan. Näistä voidaan päästä eroon siirtämällä rakenteiden toiminta sopivasti valittuun luokkarakenteeseen. Mallin luokkarakenne on kuvattu seuraavassa: 6
7 Kuva 3. State-mallin luokkarakenne (Vrt. [Gam]) Mallin toimijat ovat Context, joka määrittelee asiakkaihin päin näkyvän rajapinnan ja pitää yllä jäsenmuuttujassaan kulloisenkin tilan kuvaavaa State-oliota. State, joka on kaikkien tilaluokkien kantaluokka. ConcreteStateA, jne. Luokat, jotka toteuttavat kaikki mahdolliset tilat. Esimerkki. Edellä mainitun palvelinsovelluksen perusta voisi olla C++:lla toteutettuna seuraava. Palvelinluokan koodin pohja olisi: class Palvelin { private: // Tämänhetkinen tila PalvelinState* pscurrent; // Mahdolliset tilat PalvelinState *pslisten; PalvelinState *psserving; PalvelinState *psclosed; // Vakiot tilanvaihdoille const static int LISTEN = 1; const static int SERVING = 2; const static int CLOSED = 3; ; Palvelin(); ~Palvelin(); void startservice(); void stopservice(); void closeserver(); void changestate(int to); Palvelin::Palvelin(){ pslisten = new ListenState(); psserving = new ServingState(); psclosed = new ClosedState(); pscurrent = pslisten; 7
8 Palvelin::~Palvelin(){ delete pslisten; delete psserving; delete psclosed; void Palvelin::startService() { pscurrent->start(*this); void Palvelin::stopService() { pscurrent->stop(*this); void Palvelin::closeServer() { pscurrent->close(*this); void Palvelin::changeState(int to) { switch(to) { case LISTEN: pscurrent = pslisten; break; case SERVING: pscurrent = psserving; break; case CLOSED: pscurrent = psclosed; break; Tilojen perusluokka voitaisiin toteuttaa abstraktina luokkana class PalvelinState { virtual void start(palvelin& p)=0; virtual void stop(palvelin& p)=0; virtual void close(palvelin& p)=0; virtual ~PalvelinState(){ ; 8
9 jolloin tilaluokkien koodit voisivat perustua alla oleviin runkoihin class ListenState: public PalvelinState { // Määrittely kuten luokassa PalvelinState void ListenState::start(Palvelin& p) { std::cout << "Started service..." << std::endl; p.changestate(palvelin::serving); void ListenState::stop(Palvelin& p){ std::cout << "Service not started. Cannot stop." << std::endl; void ListenState::close(Palvelin& p){ std::cout << "Closing server." << std::endl; p.changestate(palvelin::closed); class ServingState: public PalvelinState { // Määrittely kuten luokassa PalvelinState void ServingState::start(Palvelin& p) { std::cout << "Service already started." << std::endl; void ServingState::stop(Palvelin& p){ std::cout << "Service stopped." << std::endl; p.changestate(palvelin::listen); void ServingState::close(Palvelin& p){ std::cout << "Cannot close while service active." << std::endl; class ClosedState: public PalvelinState { // Määrittely kuten luokassa PalvelinState void ClosedState::start(Palvelin& p) { std::cout << "Cannot start, server closed." << std::endl; void ClosedState::stop(Palvelin& p){ std::cout << "Cannot stop, server closed." << std::endl; void ClosedState::close(Palvelin& p){ std::cout << "Server already closed." << std::endl; Käytettäessä State-suunnittelumallia on otettava huomioon sen seurauksia. Koska malli kapseloi tiettyyn tilaan liittyvän toiminnan yhteen luokkaan, on helppoa lisätä uusia tiloja laatimalla uusia aliluokkia. Tämä lähestymistapa on sujuvampi kuin se, että tilaa pidettäisiin yllä Context-oliossa, jolloin luokan operaatiot voisivat tarkistaa tilan ja muuttaa sitä. Tällöin ajaudutaan helposti kirjoittamaan laajoja valintarakenteita. State-malli poistaa tämän ongelman sen kustannuksella, että Contextin toiminta hajautuu useaan luokkaan. 9
10 Mallia käytettäessä Context-olion tilamuutokset on helpompi nähdä koodista, koska jokainen tilamuutos perustuu tilaolion vaihtamiseen. Mikäli olion tila perustuu pelkästään paikallisten muuttujien arvoihin, voi erilaisten pysyvien tilojen hahmottaminen olla vaikeampaa. Lisäksi tilaoliot voidaan myös jossain tapauksissa jakaa, ellei niillä itsellään ole sisäistä tilaa. Käsitellään vielä lopuksi State-mallin toteuttamista. Edellä olevassa palvelinesimerkissä tilaoliot määräävät palvelinolion tilanmuutoksen. Tämä onkin joustavampi tapa kuin jättää tilan muuttaminen mallin Context-olion vastuulle. Nyt nimittäin tilanmuutoslogiikan muuttaminen ja uusien tilaolioiden lisääminen on huomattavasti helpompaa kuin keskitetyssä tapauksessa. Hajautetussa järjestelmässä on kuitenkin pari haittaa: Context-olioon joudutaan määrittelemään rajapinta, jonka kautta tilaa voidaan muuttaa ja tilaolioiden kytkentä kasvaa, koska niiden on tiedettävä toisistaan niin paljon, että ne voivat aiheuttaa tilanmuutoksen. Erityisesti kielissä, joissa ei ole roskienkeruuta, pitää miettiä, millä tavoin tilaoliot luodaan. Ne voidaan luoda kaikki kerralla ja pitää olemassa koko ohjelman suorituksen ajan. Toinen mahdollisuus on luoda oliot tarvittaessa ja hävittää ne, kun niitä ei enää tarvita. Jälkimmäinen vaihtoehto saattaa kannattaa, kun tilaoliot ovat suuria ja tilanvaihtoja tapahtuu harvoin. Sen sijaan tilojen vaihtuessa tiuhaan, kannattaa valita ensimmäinen vaihtoehto. Mainittakoon vielä, että State-malli voidaan korvata käyttämällä taulukkoja. Tällöin tilasta toiseen siirryttäessä seuraava tila luetaan taulukosta. Tämä lähestymistapa korostaa mieluummin tilasiirtymiä, kun State-malli taas keskittyy enemmän tilakohtaiseen käyttäytymiseen. Lähteet [Gam] Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object- Oriented Software, Addison-Wesley
812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State
2015 syksy 2. vsk VIII Suunnittelumallit Observer ja State Sisältö 1. Johdanto käyttäytymismalleihin 2. Observer 3. State Suunnittelumallit Observer ja State 2 VIII.1 Johdanto käyttäytymismalleihin Päätarkoitus
Lisätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton
2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.
Lisätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite
2015 syksy 2. vsk VII Suunnittelumallit Adapter ja Composite Sisältö 1. Johdanto rakennemalleihin 2. Adapter (Sovitin) 3. Composite (Rekursiokooste) Suunnittelumallit Adapter ja Composite 2 VII.1 Johdanto
Lisätiedot812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä
2016 IX Olioiden välisistä yhteyksistä Sisältö 1. Johdanto 2. Kytkentä 3. Koheesio 4. Näkyvyydestä 2 Johdanto n Ohjelmassa syntyy kytkentöjä olioiden välille Toivottuja ja epätoivottuja n Näkyvyys vaikuttaa
LisätiedotOlio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton. 1. Proxy (Edustaja)
Olio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Tässä osassa tutustutaan yhteen rakennemalliin (Proxy) ja kolmeen luontimalliin (Factory Method, ) teoksen [Gam] pohjalta.
LisätiedotGraafisen käyttöliittymän ohjelmointi Syksy 2013
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 8 Suunnittelumallit käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Yleistä Suunnittelumalli on
LisätiedotSuunnittelumalleja, MVC. Juha Järvensivu 2008
Suunnittelumalleja, MVC Juha Järvensivu juha.jarvensivu@tut.fi 2008 Sisältö Tarkkailija Strategia Rekursiokooste Tehdas-metodi MVC Tarkkailija suunnittelumalli Tarkkailijamalli (Observer) Määrittelee olioiden
LisätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat Rajapinnat Java-kieli ei tue luokkien moniperintää. Jokaisella luokalla voi olla vain yksi välitön yliluokka. Toisinaan olisi
LisätiedotOlio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä
Olio-ohjelmointi Johdanto suunnittelumalleihin Hyvin toimivan olio-ohjelmointiparadigmaa noudattavan ohjelman suunnitteleminen ei ole helppo tehtävä. On löydettävä sopiva luokkarakenne kuvaamaan ratkaistavaa
LisätiedotSisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki
Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.
LisätiedotRajapinta (interface)
1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä
LisätiedotOlio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter
Olio-ohjelmointi Suunnittelumallit Adapter ja Composite Rakennemalleissa päähuomio kohdistetaan siihen, miten luokkia ja olioita yhdistellään muodostamaan laajempia rakenteita. Rakenteelliset luokkamallit
LisätiedotJAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
Lisätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotMuutamia peruskäsitteitä
Muutamia peruskäsitteitä Huom. 1: nämä peruskäsitteet eivät muodosta hyvin määriteltyä keskenään yhteensopivien käsitteiden joukkoa, vaan käsitteet ovat osittain päällekkäisiä ja eri yhteyksissä niillä
Lisätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:
LisätiedotT Henkilökohtainen harjoitus: FASTAXON
T-76.115 Henkilökohtainen harjoitus: FASTAXON Suunnittelumallit Group: Muuntaja Pentti Vänskä 52572W 2 1. Toteutus Tämä henkilökohtainen harjoitustyö käsitteli suunnittelumallien (Design Patterns) käyttöä
LisätiedotJavan perusteita. Janne Käki
Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).
Lisätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin
812347A Olio-ohjelmointi, 2015 syksy 2. vsk II Johdanto olio-ohjelmointiin Sisältö 1. Abstraktiosta 2. Olio-ohjelmoinnin historiaa 3. Olioparadigmasta 4. Peruskäsitteiden esittely 2 II.1 Abstraktiosta
LisätiedotOhjelmistotekniikan menetelmät, suunnittelumalleja
582101 - Ohjelmistotekniikan menetelmät, suunnittelumalleja 1 Suunnittelumallit (design patterns) Kuvaus sellaisesta luokkarakenteesta & olioiden vuorovaikutuksesta, joka ratkaisee tietyn yleisen ongelman
LisätiedotTIE-20200 Ohjelmistojen suunnittelu
TIE-20200 Ohjelmistojen suunnittelu Luento 1: Virtuaalifunktiot, Template method 1 Yleistä asiaa Muistakaa harkkatyöilmoittautuminen 23 ryhmää (mm. lihansyöjäkirahvi), vajaita ryhmiäkin on 44 henkeä vielä
LisätiedotOliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä
Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä
LisätiedotSuunnittelumallien käyttö ohjelmistosuunnittelussa
Suunnittelumallien käyttö ohjelmistosuunnittelussa Mika Rantakeisu Rovaniemen ammattikorkeakoulu Avoin ammattikorkeakoulu mika.rantakeisu@edu.ramk.fi Tiivistelmä Tämä on selvitys suunnittelumallien käytöstä
Lisätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
LisätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely
LisätiedotLohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3
16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut
LisätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä
LisätiedotOhjelmistotekniikan menetelmät, UML
582101 - Ohjelmistotekniikan menetelmät, UML 1 Sisältö DFD- ja sidosryhmäkaavioiden kertaus Oliomallinnus UML:än kaaviotyypit 2 Tietovuokaaviot Data flow diagrams, DFD Historiallisesti käytetyin kuvaustekniikka
LisätiedotJava kahdessa tunnissa. Jyry Suvilehto
Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotTIE-20200 Ohjelmistojen suunnittelu
TIE-20200 Ohjelmistojen suunnittelu Luento 1: Virtuaalifunktiot, Template method 1 Seuraavaksi tarjolla: Otekn-asiaa vähän pintaa syvemmältä Virtuaalifunktiot ja erikoistaminen, olioiden kopiointi ja elinaika
LisätiedotTIE-20200 Ohjelmistojen suunnittelu. Luento 8..9: moniperintä
TIE-20200 Ohjelmistojen suunnittelu Luento 8..9: moniperintä 1 Ajankohtaista Harjoitustyön suunnittelusessiot pidetty, työt jatkuvat, välivaiheen esittely seuraavana Viimeinen viikkoharjoituskerta, palataan
LisätiedotInteraktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
LisätiedotSisällys. 15. Lohkot. Lohkot. Lohkot
Sisällys 15. Lohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.1 15.2 Lohkot Aaltosulkeet
LisätiedotRajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.
11. Rajapinnat 11.1 Sisällys Johdanto. Abstrakti luokka vai rajapinta? Rajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen
Lisätiedotprivate TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;
Tietorakenteet, laskuharjoitus 7, ratkaisuja 1. Opiskelijarekisteri-luokka saadaan toteutetuksi käyttämällä kahta tasapainotettua binäärihakupuuta. Toisen binäärihakupuun avaimina pidetään opiskelijoiden
LisätiedotLohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3
15. Lohkot 15.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 15.2 Lohkot Aaltosulkeet
LisätiedotHELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu
HELIA 1 (14) Luento 7 Käyttöliittymäolio... 2 Olioajattelun perusteet... 3 Tavoitteet... 3 Peruskäsitteet... 4 Olio / Olioinstanssi / Olion esiintymä... 4 Ominaisuudet... 4 Toiminnot... 4 Olioluokka /
LisätiedotSisällys. 11. Rajapinnat. Johdanto. Johdanto
Sisällys 11. ajapinnat. bstrakti luokka vai rajapinta? ajapintojen hyötyjä. Kuinka rajapinnat määritellään ja otetaan käyttöön? Eläin, nisäkäs, kissa ja rajapinta. Moniperiytyminen rajapintojen avulla.
LisätiedotOliosuunnittelu. Oliosuunnittelu
Oliosuunnittelu Perinnän ja dynaamisen sidonnan hyödyntäminen Tarkastellaan ohjelmaa, jonka tehtävänä on tuottaa erilaisista kuvioista muodostuva kuvaesitys Ratkaisu 1: perinteinen malli - ei perintää
LisätiedotMuusta kuin vesisioista
Muusta kuin vesisioista Janne Käki 8.12.2006 Metodin kuormittaminen (overloading) Samannimisestä metodista on määritelty samassa luokassa (tai samassa yli- ja aliluokkien jatkumossa) useita versioita,
Lisätiedot812341A Olio-ohjelmointi Peruskäsitteet jatkoa
812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää
LisätiedotHarjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:
Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int
LisätiedotJärjestelmäarkkitehtuuri (TK081702)
Järjestelmäarkkitehtuuri (TK081702) yleistyvät verkkopalveluissa Youtube Google... Avaavat pääsyn verkkopalvelun sisältöön. Rajapintojen tarjoamia tietolähteitä yhdistelemällä luodaan uusia palveluja,
LisätiedotTIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely
Lyhyt UML-opas UML -pikaesittely UML, Unified Modeling Language Standardoitu, yleiskäyttöinen mallinnuskieli, jota ylläpitää/hallitsee (Object Management Group) OMG Historiaa: 90-luvulla oli paljon kilpailevia
LisätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Opintojakso TT00AA11 Ohjelmoinnin jatko (Java) Tavoite Opiskelija ymmärtää olio-ohjelmoinnin problematiikan. Opiskelija osaa määritellä ja käyttää itse
LisätiedotUML -mallinnus TILAKAAVIO
UML -mallinnus TILAKAAVIO SISÄLLYS 3. Tilakaavio 3.1 Tilakaavion alku- ja lopputilat 3.2 Tilan nimi, muuttujat ja toiminnot 3.3 Tilasiirtymä 3.4 Tilasiirtymän vai tilan toiminnot 3.5 Tilasiirtymän tapahtumat
LisätiedotOhjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1
Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri 2 28.11.2008 Harri Laine 1 Ohjelmistoarkkitehtuuri Rajapinta UML:ssä piirteiden (attribuuttien ja operaatioiden) kokoelma, josta ei voi suoraan luoda ilmentymiä
LisätiedotOhjelmointi 2 / 2010 Välikoe / 26.3
Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään
LisätiedotOhjelmistojen mallintaminen, suunnittelumalleja
582104 Ohjelmistojen mallintaminen, suunnittelumalleja 1 Suunnittelumallit (design patterns) Kuvaus sellaisesta luokkarakenteesta & olioiden vuorovaikutuksesta, joka ratkaisee tietyn yleisen ongelman tiettyjen
LisätiedotC++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi
1 C++11 Syntaksi Jari-Pekka Voutilainen 13.4.2012 2 Range-for Iteroi säiliön kaikki alkiot for-silmukassa. Säiliöltä vaaditaan begin- ja end-iteraattorit. Pätee kaikille C++11 STL-säiliöille, taulukoille,
LisätiedotUML Luokkakaavio 14:41
UML Luokkakaavio UML Olio-ohjelman luokkien pääpiirteet voidaan kätevähkösti esittää ns. UML-luokkakaaviona. Näin usein tehdäänkin esim. suunniteltaessa, millaisia luokkia ohjelmaan on tarkoitus laatia,
Lisätiedot9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat
LisätiedotSisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
LisätiedotSisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)
Sisällys JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys Periytyminen (inheritance) Näkyvyys (visibility) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E. Hyvönen: Java Osa
LisätiedotSisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä
Sisällys 9. Periytyminen Javassa Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat
LisätiedotRajapinnat ja olioiden välittäminen
Rajapinnat ja olioiden välittäminen Moduulit/oliot kutsuvat toisiaan kapseloitujen rajapintojen läpi Kutsuissa välitetään usein olioita paikasta toiseen Jos olion omistus (= tuhoamisvastuu) säilyy koko
Lisätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä
812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus
LisätiedotOlio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.
4. Periytyminen 4.1. Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi
LisätiedotOhjelmistojen mallintaminen, sekvenssikaaviot
582104 - Ohjelmistojen mallintaminen, sekvenssikaaviot 1 Vuorovaikutussuunnittelu Oliojärjestelmän toiminta perustuu olioiden vuorovaikutukseen ja yhteistyöhön Olioiden yhteistyö toteutuu operaatioiden
Lisätiedot4. Luokan testaus ja käyttö olion kautta 4.1
4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään
LisätiedotOsio 4: Graafinen käyttöliittymä
Javan Swing-tekniikan perusteet: Muistutus: Tarvitset seuraavia komponentteja harjoituksissa: otsikkoteksti (label) muokkausruutu (text field) komentopainike (button) yhdistelmäruutu (combo box) paneeli
LisätiedotOhjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1
3. Komponentit ja rajapinnat 3.1 Komponenttien idea: ohjelmistotuotannon rationalisointi 3.2 Mikä on ohjelmistokomponentti? 3.3 Komponentit ohjelmistoyksikköinä 3.4 Rajapinnat 3.6 Komponenttien räätälöinti
LisätiedotYleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
Lisätiedot18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
LisätiedotOlion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();
Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio
LisätiedotT SEPA - päiväkirja: Design Patterns. ETL työkalu
T-76.115 SEPA - päiväkirja: Design Patterns ETL työkalu Versio Päivämäärä Tekijä Kuvaus 1.0 25.10.2004 Jani Honkanen PP-vaiheen jälkeinen versio 1,1 26.11.2004 Mika Suvanto I1- vaiheen kokemuksia lisätty
LisätiedotOhjelmistojen mallintaminen Unified Modeling Language (UML)
582104 Ohjelmistojen mallintaminen Unified Modeling Language (UML) 1 Olioperustaisuus Olio toimii mallinnuksen perusyksikkönä eri abstraktiotasoilla Järjestelmän rajaus, suunnittelu, ohjelmointi, suoritus..
LisätiedotSisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
LisätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja
LisätiedotC++11 lambdat: [](){} Matti Rintala
C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n
LisätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin
LisätiedotOhjelmoinnin jatkokurssi, kurssikoe 28.4.2014
Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.
LisätiedotSisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä
Sisälls 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen.. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona.. Muuttumattomat ja muuttuvat merkkijonot.
LisätiedotSisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2
6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma
LisätiedotSisällys. 16. Lohkot. Lohkot. Lohkot
Sisällys 16. ohkot Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.1 16.2 ohkot aarisulut
LisätiedotT740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010
12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi
LisätiedotKääreluokat (oppikirjan luku 9.4) (Wrapper-classes)
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
Lisätiedot1. Olio-ohjelmointi 1.1
1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja
LisätiedotListarakenne (ArrayList-luokka)
Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen
LisätiedotViestinvälitysarkkitehtuurit
Viestinvälitysarkkitehtuurit Lähtökohta: Järjestelmä koostuu keskenään kommunikoivista komponenteista, mahdollisesti hajautettuja Komponenttien palveluja ei tiedetä tarkasti etukäteen Komponentteja ja
LisätiedotAalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa
Aalto Yliopisto T-106.2001 Informaatioverkostot: Studio 1 Oliot ja luokat Javaohjelmoinnissa Vesa Laakso 22.9.2012 Sisällysluettelo Sisällysluettelo... 1 Johdanto... 2 1. Luokka... 2 2. Olio... 2 3. Luokan
LisätiedotVertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004
Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 5: Sijoituslause, SICP-oliot, tietorakenteen muuttaminen (mm. SICP 33.1.3, 3.33.3.2) Riku Saikkonen 6. 11. 2012 Sisältö 1 Muuttujan arvon muuttaminen:
LisätiedotUML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN
UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN SISÄLLYS 3. Luokkakaavio UML -mallinnuskielessä 3.1 Luokkakaavion luokan rakenteet 3.2 Luokan kuvauksesta C++ ohjelmakoodiksi 3.3 Luokkakaavion luokkien yhteystyypit
Lisätiedot9. Periytyminen Javassa 9.1
9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.
Lisätiedot2. Olio-ohjelmoinista lyhyesti 2.1
2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin
LisätiedotOlio-ohjelmointi Johdanto olio-ohjelmointiin
Olio-ohjelmointi Johdanto olio-ohjelmointiin Ohjelmistoa kehitettäessä voidaan tunnistaa ainakin kaksi abstraktiota: prosessiabstraktio ja dataabstraktio. Prosessiabstraktio huomattiin jo varhain, koska
LisätiedotMikä yhteyssuhde on?
1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String
LisätiedotITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat
Lisätiedot14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
Lisätiedot815338A Ohjelmointikielten periaatteet
815338A Ohjelmointikielten periaatteet 2015-2016 V Abstraktit tietotyypit ja olioohjelmointi Sisältö I. Abstraktit tietotyypit II. 1. Johdatus abstrakteihin tietotyyppeihin 2. Abstraktit tietotyypit Adassa
LisätiedotSolidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi
Solidity älysopimus ohjelmointi Sopimus suuntautunut ohjelmointi Merkle puu Kertausta eiliseltä Solidity on korkean tason älysopimus ohjelmointikieli Muistuttaa olio-ohjelmointia Javalla Sopimuskoodi on
LisätiedotOhjelmistotuotanto, s
Ohjelmistotuotanto Suunnittelu 3 Kuvion piirtotavan erottaminen omaksi piirtoalgoritmin toteuttavaksi olioksi on esimerkki (strategy) suunnittelutason ratkaisumallista, joka lisää joustavuutta ja muunnettavuutta
LisätiedotUML ja luokkien väliset suhteet
UML ja luokkien väliset suhteet -Luokan kuvaaminen UML-tekniikalla -Yhteyssuhde ja koostumussuhde 1 Luokan kuvaaminen UML-tekniikalla : Luokka - attribuutti1 : tietotyyppi # attribuutti2 : tietotyyppi
LisätiedotA) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)
1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden
LisätiedotTenttikysymykset. + UML- kaavioiden mallintamistehtävät
Tenttikysymykset 1. Selitä mitä asioita kuuluu tietojärjestelmän käsitteeseen. 2. Selitä kapseloinnin ja tiedon suojauksen periaatteet oliolähestymistavassa ja mitä hyötyä näistä periaatteista on. 3. Selitä
LisätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotViestinvälitysarkkitehtuurit Lähtökohta:
Ohjelmistoarkkitehtuurit Kevät 2012-2013 Johannes Koskinen http://www.cs.tut.fi/~ohar/ 1 Viestinvälitysarkkitehtuurit Lähtökohta: Järjestelmä koostuu keskenään kommunikoivista komponenteista, mahdollisesti
Lisätiedot