Kertaus on opintojen äiti: OSI malli. Oliokeskeiset välikerrokset. Transmission Control Protocol (TCP) Kuljetus eli transport kerros

Koko: px
Aloita esitys sivulta:

Download "Kertaus on opintojen äiti: OSI malli. Oliokeskeiset välikerrokset. Transmission Control Protocol (TCP) Kuljetus eli transport kerros"

Transkriptio

1 Kertaus on opintojen äiti: OSI malli Oliokeskeiset välikerrokset Application Presentation Session Transport Network Data link Physical Kuljetus eli transport kerros Kerros 4 OSI-mallissa. Tiedon siirto verkossa. Internetissä kaksi yleistä protokollaa, TCP ja UDP. Tarkalleen ottaen TCP/IPpino ei noudata OSImallia, mutta kuljetuskerroksen tehtävien osalta melko hyvin. Application Presentation Session Transport Network Data link Physical Transmission Control Protocol (TCP) Kaksisuuntainen tavuvirta hajautettujen komponenttien välillä. Esim. UNIXin rsh, rcp ja rlogin toimivat TCP:n päällä. Luotettava mutta hieman hidas. Puskurointi molemmissa päissä -> laskentanopeudet voivat olla erilaiset.

2 Pyynnöt ja vastaukset TCP:llä User Datagram Protocol (UDP) Asiakas Application Palvelin Application Tavuista koostuvien datagrammien välittäminen komponentilta toiselle. Datagrammissa on vastaanottajan osoite. Epäluotettava mutta hyvin nopea protokolla. Presentation Presentation Viestin pituus rajoitettu. Vastaanottajan pää puskuroitu. Session Pyynnöt Session Esim. UNIXin rwho-komento on UDP-pohjainen. Transport Syötevirta Tulosvirta Transport Vastaukset Pyynnöt ja vastaukset UDP:llä Sovellus suoraan kuljetuskerroksen päälle Asiakas Application Presentation Session Transport Palvelin Application Presentation Pyyntödatagrammit Session Transport Vastausdatagrammit Pyyntöjen parametrit muunnettava manuaalisesti tavujonoiksi. Tiedon heterogeenisyys ratkaistava manuaalisesti. Komponentit tunnistettava manuaalisesti. Komponentit aktivoitava manuaalisesti. Ei takeita tyyppiturvallisuudesta. Hajautettujen komponenttien interaktiot synkronoitava manuaalisesti. Ei Quality of Service-takeita (QoS).

3 Välikerroksen rooli 2 9 Sovelluksen ja kuljetuskerroksen välissä, toteuttaa istunto- (session) ja esitystapakerrokset (presentation). Tekee hajautuksen tuntumattomaksi. Ratkaisee heterogeenisyyden laitteistotasolla, käyttöjärjestelmätasolla, verkkojen välillä ja ohjelmointikielten välillä. Kehitys- ja ajoympäristö hajautetuille komponenteille. Metodikutsu vs. etämetodikutsu Caller Kutsuja Kutsuttava Kutsuja Tynkä Kutsuttava Tynkä Kuljetuskerros (esim. TCP tai UDP) 2 10 tynkä on englanniksi stub Tynkä (engl. stub) Tyngän koodi generoidaan automaattisesti rajapintamäärittelystä. Asiakastynkä edustaa palvelinta asiakkaalle, palvelintynkä edustaa asiakasta palvelimelle. Tynkä toteuttaa proxy-patternin Palvelintynkää kutsutaan joskus rangaksi (engl. skeleton). Tyyppiturvallisuus. Tyngät myös huolehtivat synkronoitumisesta kutsussa Synkronoituminen Tavoitteena samanlainen synkronoituminen kuin paikallisessa metodikutsussa (kutsuja odottaa vastausta). Tyngät toteuttavat: Asiakastynkä lähettää pyynnön ja odottaa vastausta palvelimelta. Palvelintynkä odottaa pyyntöjä ja kutsuu varsinaista palvelinoliota pyynnön saadessaan. 2 12

4 2 13 Yksinkertainen tynkä ranka toteutus Tehdään yksinkertaisen etäolion tynkä ja ranka itse Javalla. Etäoliolle määritellään seuraavanlainen rajapinta: public interface Person { public int getage() throws Throwable; public String getname() throws Throwable; Palvelinolion toteutus public class PersonServer implements Person { int age; String name; public PersonServer(String name, int age) { this.age = age; this.name = name; public int getage() { return age; public String getname() { return name; 2 14 Asiakkaan tynkä import java.io.objectoutputstream; import java.io.objectinputstream; import java.net.socket; public class Person_Stub implements Person { Socket socket; public Person_Stub() throws Throwable { socket = new Socket(" ", 9000); public int getage() throws Throwable { ObjectOutputStream outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeobject("age"); outstream.flush(); ObjectInputStream instream = new ObjectInputStream(socket.getInputStream()); return instream.readint(); public String getname() throws Throwable { ObjectOutputStream outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeobject("name"); outstream.flush(); ObjectInputStream instream = new ObjectInputStream(socket.getInputStream()); return (String)inStream.readObject(); 2 15 Palvelimen ranka import java.io.objectoutputstream; import java.io.objectinputstream; import java.net.socket; import java.net.serversocket; public class Person_Skeleton extends Thread { PersonServer myserver; public Person_Skeleton(PersonServer server) { this.myserver = server; ; 2 16 public void run() { try { ServerSocket serversock = new ServerSocket(9000); Socket sock = serversock.accept(); while (soc!= null) { ObjectInputStream istream = new ObjectInputStream(soc.getInputStream()); String method = (String)iStream.readObject(); if (method.equals("age")) { int age = myserver.getage(); ObjectOutputStream ostream = new ObjectOutputStream(sock.getOutputStream()); ostream.writeint(age); ostream.flush();

5 Palvelimen ranka (jatkoa) else if (method.equals("name")) { String name = myserver.getname(); ObjectOutputStream ostream = new ObjectOutputStream( sock.getoutputstream()); ostream.writeobject(name); ostream.flush(); catch (Throwable t) { t.printstacktrace(); System.exit(0); public static void main(string args[]) { PersonServer person = new PersonServer("Eufrosyne", 57); Person_Skeleton skel = new Person_Skeleton(person); skel.start(); 2 17 Asiakasohjelma public class PersonClient { public static void main(string [] args) { try { Person person = new Person_Stub(); int age = person.getage(); String name = person.getname(); System.out.println(name + " on " + age + "-vuotias"); catch (Throwable t) { t.printstacktrace(); 2 18 Yksinkertaisen tynkä ranka toteutuksen ongelmia Käsityötä Palvelimen osoite on langoitettu asiakastyngän koodiin Vain yksi henkilöpalvelin Jos palvelimia voisikin olla useita: Mitä jos haluttaisiin lisätä henkilölle vanhemmat: miten henkilö voi viitata toisiin henkilöihin? Miten erotettaisiin samalla koneella oleville eri henkilöpalvelimille tulevat kutsut? Entäpä jos asiakas ja palvelin olisivat erilaisissa laitteistoympäristöissä? Entä jos asiakas ja palvelin pitäisi tehdä eri ohjelmointikielillä? 2 19 Kutsumeklari (Object Request Broker, ORB) Kutsumeklari (lyhyesti ORB) on oliokeskeisen hajautetun järjestelmän ydin Mahdollistaa edellisen kalvon ongelmien ratkaisemisen ORBin avulla hajautetut oliot voivat viitata toisiinsa ja kutsua toistensa palveluita ORB mahdollistaa myös monet muut välikerroksen toiminnot Kaikissa kehittyneissä oliokeskeisissä välikerroksissa on ORB, kutsuttiin sitä sillä nimellä tai jollain muulla 2 20

6 Olioihin viittaaminen Edellä olevassa yksinkertaisessa toteutuksessa olio oli tietyssä portissa tietyllä koneella RPC:ssä käytetään portmap-demonia, joka kuvaa palveluiden nimet portteihin Jos sitä käytettäisiin oliojärjestelmässä, joka oliolla pitäisi olla yksikäsitteinen nimi Oliokeskeisissä välikerroksissa käytetään olioviitteitä ORB huolehtii olioviitteistä Asiakkaat ja palvelimet eivät ymmärrä olioviitteiden toteutuksesta mitään 2 21 Olioihin viittaaminen (jatkoa) Asiakas identifioi kutsuttavan olion olioviitteellä Asiakkaan ORB tietää viitteen perusteella, mille koneelle kutsu on matkalla Asiakkaan ORB välittää viitteen (tai osan siitä) kutsun mukana palvelimen ORBille Palvelimen ORB osaa viitteen perusteella ohjata kutsun oikealle oliolle Välissä voi olla vielä olioadapteri Tarvittaessa olio voidaan aktivoida 2 22 Rajapintamäärittelykieli (Interface Definition Language, IDL) 2 23 IDL esimerkki 2 24 Kaikissa oliokeskeisissä välikerroksissa on rajapintamäärittelykieli (IDL). (Java/RMI:ssä tämä kieli on Java.) Perus-RPC:n ominaisuuksien lisäksi parametreina voidaan välittää oliotyyppejä, voidaan nostaa poikkeuksia ja perinnän käsite on tuettu. IDL-kääntäjä tuottaa rajapintakuvauksesta tyngät ja rangat, jotka toteuttavat istunto- ja esitystapakerrokset. interface Document : Object { typedef struct _Date { short day; short month; short year; Date; attribute string name; attribute string content; ; interface DocumentStore : Object { exception NameNotFound{; short save (in Document d); Document load(in string name) raises(namenotfound); ;

7 Yksinkertaistettu kehitysprosessi Suunnittelu Rajapintojen määrittely 2 25 Pääsytuntumattomuus Asiakastyngällä on samat operaatiot kuin palvelinoliolla. Näinollen asiakas voi kutsua paikallisesti asiastynkää tai 2 26 Palvelintynkien generointi Palvelimen toteutus Palvelimen rekisteröinti Asiakastynkien generointi Asiakkaan toteutus kutsua paikallisesti suoraan palvelinoliota kutsua muuttamatta. Välikerros voi optimoida kommunikointia olemalla käyttämättä tynkää, jos asiakas ja palvelin ovat samalla koneella Paikkatuntumattomuus Palvelimen rekisteröinti Olion identiteetti Olioviitteet Asiakkaat tekevät pyyntöjä palvelinolioille, jotka tunnistetaan olioviitteillä. Palvelimen fyysistä sijaintia ei tarvitse tietää. Miten olioviite saadaan? Olioadapterin pitää pystyä paikallistamaan ja käynnistämään palvelinoliot. Palvelinoliot rekisteröidään jonkinlaiseen talletuspaikkaan. Rekisteröinti on välikerros- ja tuotekohtaista. Olioadapteri etsii oliota talletuspaikasta ennen aktivointia.

8 2 29 Sisältö 2 30 CORBA: yleisesittely CORBA CORBAn oliomalli CORBA IDL CORBA-arkkitehtuuri Object Management Group (OMG) Yleishyödyllinen yhteisö, jonka päämaja on Yhdysvalloissa. Perustettu Yli 800 jäsentä (v. 2000). Tehtävänä kehittää ja tehdä tunnetuiksi oliokeskeisiä teollisuusstandardeja sovellusten yhteensovittamiseksi, esim. CORBA ODMG-93 UML CORBAn tavoitteet Hajautetut ja heterogeeniset etäkutsut käyttäjille ja ohjelmoijille tuntumattomasti. Uusien ja legacy-komponenttien integrointi. Avoin, ilmainen standardi. Laaja teollisuuden konsensus.

9 CORBA arkkitehtuuri Oliomalli ja rajapintamäärittely Application Objects Domain Interfaces Object Request Broker CORBAservices CORBA facilities Oliot Tyypit Moduulit Attribuutit Operaatiot Pyynnöt Poikkeukset Alityypit OMG IDL Kieli, jolla voi ilmaista CORBAn oliomallin kaikki käsitteet. OMG/IDL on ohjelmointikieliriippumaton. perustuu paljolti C++:aan. ei ole ohjelmointikieli, vaan puhtaasti deklaratiivinen. Sidonnat moniin eri ohjelmointikieliin. CORBAn oliomalli: oliot Oliolla on tunniste, joka on yksikäsitteinen samassa ORBissa. Olioon voi olla monia viitteitä. Viitteet tukevat paikkatuntumattomuutta. Viitteet ovat säilyviä (persistent).

10 CORBAn oliomalli: tyypit CORBA: moduulit Rakennettuja tyyppejä Oliotyyppi typedef struct Osoite { string katuosoite; string postinumero; string postitoimipaikka; ; typedef sequence<osoite> Osoitelista; interface Postitoimisto {... ; Atomisia tyyppejä module People { typedef struct Address { string flat_number; string street; string postcode; string city; ;... ; People::Address CORBA: attribuutit ja operaatiot CORBA: poikkeukset interface Tyontekija; typedef sequence<tyontekija> Tyontekijalista; interface Ryhma { readonly attribute string nimi; attribute Tyontekija paallikko; attribute Tyontekijalista jasenet; void maksapalkat(in Paivays p);... ; Yleiset poikkeukset (esim. verkko rikki, epäkelpo olioviite, muisti loppunut) Käyttäjän määrittelemät poikkeukset exception KassaTyhja { double vaje; ; interface Ryhma {... void maksapalkat(in Paivays p) raises(kassatyhja); ;

11 CORBA: perintä ja alityypit CORBA: arkkitehtuuri interface Yhteiso { readonly attribute string nimi; ; Asiakas Palvelinolion toteutus interface Yritys : Yhteiso { readonly attribute string lytunnus;... ; Dyn. kutsurajap. Asiakas tynkä ORB rajapinta ORBin ydin Toteutusranka Olio adapteri Yksi standardoitu rajapinta Yksi rajapinta / oliotyyppi Yksi rajapinta / olioadapteri ORB kohtainen rajapinta Yksinkertainen CORBA esimerkki Syntyvät tiedostot Tehdään yksinkertainen kertoman laskeva palvelin CORBAlla ja C++:lla Kirjoitetaan tiedostoon kertoma.idl seuraava rajapinta: interface kertoma { long laske(in long n); ; Orbixin idl-kääntäjää käytetään seuraavasti: idl -base -poa kertoma.idl kertoma.hh: asiakastyngän otsikkotiedosto, tarvitaan myös palvelimessa kertomac.cxx: asiakastyngän toteutus kertomas.hh: palvelinrangan otsikkotiedosto kertomas.cxx: palvelinrangan toteutustiedosto

12 kertoma_impl.hh kertoma_impl.cxx #ifndef KERTOMA_IMPL_HH #define KERTOMA_IMPL_HH #include "kertomas.hh" using CORBA::Long; class kertoma_impl : public virtual POA_kertoma { public: virtual Long laske(long n) throw (CORBA::SystemException); ; #endif #include "kertoma_impl.hh" #include <iostream> using CORBA::Long; Long kertoma_impl::laske(long n) throw (CORBA::SystemException) { Long tulos = 1; for (Long i = 1; i <= n; ++i) { tulos *= i; return tulos; kertoma_server.cxx #include "kertoma_impl.hh" 2 47 kertoma_server.cxx (jatkoa) 2 48 #include <iostream> using std::cout; int main(int argc, char* argv[]) { try { // alustetaan ORB ja v litet n sille // mahdollisesti komentorivilt annetut // parametrit CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); // Haetaan viite juuri-poa:aan CORBA::Object_var obj = orb->resolve_initial_references("rootpoa"); PortableServer::POA_var poa = PortableServer::POA::_narrow(obj); cerr << "Juuri-POA haettu" << endl; // Aktivoidaan POA:n hallinnoija PortableServer::POAManager_var mgr = poa->the_poamanager(); mgr->activate(); // Luodaan kertomaolio kertoma_impl kertoma_servant; // Kirjoitetaan merkkijonoksi muutettu // viite olioon stdoutiin. kertoma_var k = kertoma_servant._this(); CORBA::String_var str = orb->object_to_string(k); cout << str << endl; // Ruvetaan kuuntelemaan pyynt j orb->run(); catch (const CORBA::Exception&) { cerr << "K sittelem t n poikkeus" << endl; return 1; return 0;

13 kertoma_client.cxx #include <iostream> #include <strstream> #include "kertoma.hh" 2 49 kertoma_client.cxx (jatkoa) 2 50 using std::cout; using std::cerr; using CORBA::Long; int main(int argc, char* argv[]) { try { // Alustetaan ORB CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); // Tarkistetaan komentoriviparametrit if (argc!= 3) { cerr << "K ytt : kertoma_client" << " IOR_merkkijonomuodossa luku" << endl; throw 0; // Muunnetaan parametrina saatu merkkijono // olioviitteeksi CORBA::Object_var obj = orb->string_to_object(argv[1]); if (CORBA::is_nil(obj)) { cerr << "Annettu olioviite on nil tai rikki" << endl; throw 0; // Muunnetaan viite oikean tyyppiseksi kertoma_var k = kertoma::_narrow(obj); if (CORBA::is_nil(k)) { cerr << "Parametri ei ole viite kertoma-olioon" << endl; throw 0; kertoma_client.cxx (jatkoa) istrstream n_str(argv[2]); Long n; n_str >> n; cout << n << ":n kertoma on " << k->laske(n) << endl; catch (const CORBA::Exception&) { cerr << "K sittelem t n CORBA-poikkeus" << endl; return 1; catch (...) { return 1; return 0; Hajautetuista metaoliomalleista

14 Motivointia Hajautetut järjestelmät koostuvat useista komponenteista. Komponentit ovat heterogeenisia. Niiden täytyy kuitenkin toimia yhdessä. Komponenteille täytyy määritellä yhteinen malli, johon sisältyvät komponenttien tilat, komponenttien palvelut ja komponenttien väliset interaktiot. Oliokeskeinen lähestymistapa Komponentti = olio. Komponentin näkyvä tila = olion attribuutit. Komponentin palvelu = olion metodi. Komponenttien interaktio = metodikutsu. Komponentin palvelun epäonnistuminen = poikkeus Metaoliomalli Tasot ja metatasot Oliokeskeisiä ohjelmointikieliä on useita, ja niiden kaikkien metaoliomallit ovat hieman erilaiset. Hajautusvälikerroksen pitää määritellä metaoliomalli, joka yhdistää heterogeenisten komponenttien mallit. Seuraavassa määritellään lyhyesti metaoliomalli, jota tällä kurssilla käytetetään. Metaoliomalli Olioiden tyypit (luokat) Taso 2 Taso 1 Oliot Taso 0

15 Olio Oliolla on yksilöllinen tunniste. Samaan olioon voi olla useita (erilaisiakin) viitteitä. Oliolla on joukko attribuutteja, joiden nimet viittaavat arvoihin. Kaksi viitettä voi viitata esim. samaan olioon tai kahteen identtiseen olioon. Oliolla on joukko operaatioita, jotka määräävät yhdessä attribuuttien kanssa sen rajapinnan. Operaatiot voivat nostaa poikkeuksia Luokka Luokka on olion tyyppi. Attribuutit, operaatiot ja poikkeukset määritellään luokassa Attribuutit Attribuutilla on nimi ja tyyppi. Tyyppi voi olla oliotyyppi (luokka) tai muu tyyppi. Toiset oliot voivat lukea attribuutin arvon Attribuutti saattaa olla myös toisten olioiden muokattavissa. Attribuuttia vastaa yksi tai kaksi operaatiota (set/get). Attribuuttia ei välttämättä toteuteta suoraan jäsenmuuttujan avulla, mutta se on hyvin yleistä. Poikkeukset 2 60 Hajautetun järjestelmän palvelupyynnöt saattavat syystä tai toisesta epäonnistua. Poikkeusta käytetään välittämään tieto epäonnistumisesta ja sen syystä palvelupyynnön lähettäjälle. Operaation suorituksen epäonnistuminen voi johtua yleisestä (esim. verkko nurin) tai oliolle spesifisestä syystä (esim. virheellinen parametri).

16 Operaatiot Operaation signatuuri koostuu nimestä, luettelosta in-, out-, ja inout-parametreja, paluuarvon tyypistä, ja luettelosta poikkeuksia, jotka operaatio voi nostaa. Operaatiokutsut Asiakasolio voi pyytää operaation suorittamista palvelinoliolta. Operaatiokutsu ilmaistaan lähettämällä viesti palvelinoliolle. Palvelinolio nimetään olioviitteellä. Asiakkaan pitää käsitellä palvelimen mahdollisesti nostamat poikkeukset Perintä ja alityypitys Metaoliomalliin sisältyy perinnän käsite, joka muodostaa alityyppisuhteen. Alityyppi perii attribuutit, operaatiot ja poikkeukset isätyypiltään. Alityypit voivat määritellä uusia ominaisuuksia. Alityypit voivat uudelleenmääritellä vanhoja ominaisuuksia. Hajautettujen oliomallien suunnittelu

17 Hajautettujen ja paikallisten olioiden erot Viitteet Aktivointi/deaktivointi Siirtäminen Säilyvyys Kutsuviive Rinnakkaisuus Kommunikointi Tietoturva Jos ei ole tarkkana, menee helposti vipuun Olion elinkaari Tavallisen olio-ohjelmointikielen oliot ovat samassa (virtuaali)koneessa, samassa muistiavaruudessa. Hajautetut oliot saatetaan luoda eri koneilla. Hajautettu olio saatetaan kopioida tai siirtää toiselle koneelle. Automaattinen roskienkeruu hankalaa. Elinkaari tarvitsee siis erityishuomiota hajautettuja olioita suunniteltaessa Viitteet olioihin Tavallisessa olio-ohjelmointikielessä viitteet toteutetaan yleensä yksinkertaisesti osoittimilla muistipaikkoihin. Joissakin kielissä osoittimet näkyvät suoraan ohjelmoijalle (C++), toisissa eivät (Smalltalk, Java). Viitteet hajautettuihin olioihin ovat ongelmallisempia Sijaintitieto Tietoturva Viitteet olioiden tyyppeihin (eli luokkiin) Viitteet hajautettuihin olioihin vievät paikallisia viitteitä enemmän tilaa (Orbixissa 40 tavua, tyypillinen tavallinen osoitin 4 tai 8 tavua) Kutsuviive Paikallisen metodikutsun viive on sadan nanosekunnin luokkaa (1 * 10-7 s) Etämetodikutsun viive on olosuhteista riippuen yleensä välillä 0, ms (0, * 10-3 s). Ero on siis kertainen! Hajautetun oliojärjestelmän partitiointi ja rajapinnat on suunniteltava siten, että olioiden palvelut suorittavat melko isoja kokonaisuuksia, eikä palveluita tarvitse pyytää kovin usein. 2 68

18 Esimerkki: peräkkäissäiliön läpikäynti Javassa Hajautetuissa olioissa Hajautetun oliomallin suunnittelu Kolme voimaa: Vector +size():int +elementat(i:int):object... List +long list (in how_many:long, out l:sequence<object>, out bi:iterator i) Iterator binding iterator +next_one(out o:object): boolean +next_n(in how_many:long, out l:sequence<object>):boolean Partitiointi Rajapintasuunnittelu Rakeisuus Partitiointi 2 71 Partitiointi koostuu niistä päätöksistä, jotka tehdään jaettaessa järjestelmän toiminnallisuutta alijärjestelmiin ja edelleen sijoiteltaessa syntyneitä alijärjestelmiä fyysisiin paikkoihinsa (tässä tapauksessa hajautettuja olioita eri koneille). Osa päätöksistä on pakotettuja toiminnallisten vaatimusten vuoksi. Toiset päätökset tehdään luovemmin eitoiminnallisten vaatimusten ja yleisten tavoiteltavina pidettävien seikkojen ohjaamina. Suorituskyky, laajennettavuus, kustannukset... Rajapintasuunnittelu Tavoitteena koheesion maksimointi Rajapinnan tulisi edustaa hyvin määriteltyä abstraktiota, ja sen kaikkien elementtien tulisi liittyä tuohon abstraktioon. Metodin tulisi tehdä yksi, koherentti tehtävä. Alijärjestelmä on kohesiivinen, jos sen rajapinnat ovat kohesiivisia ja tukevat alijärjestelmän edustamaa oliokeskeistä abstraktiota. 2 72

19 Rajapintasuunnittelu (jatkoa) Kytkentöjen (coupling) minimointi 2 73 Implisiittinen kytkentä 2 74 Kytkentä on mitta alijärjestelmien välisten riippuvuuksien vahvuudelle. Kytkennät pitäisi minimoida. Ei kytkentää (nil coupling) interface SomeObject { any do_it(in string method, in string arguments); ; Julkinen kytkentä (export coupling) Luokka riippuu vain toisen julkisesta rajapinnasta. Avoin kytkentä (overt coupling) Luokka riippuu luvallisesti toisen toteutusyksityiskohdista. Salakytkentä (covert coupling) Luokka riippuu ilman lupaa toisen toteutuksesta. Rakeisuus (granularity) 2 75 Dokumenttien noutaminen Document 2 76 Rakeisuus kuinka hienojakoinen tai karkea oliomalli on. Hienojakoisessa mallissa on paljon pieniä olioita ja pieniä tehtäviä tekeviä metodeja. Karkeassa mallissa on olioita, jotka edustavat suuria käsitteitä tai kokonaisuuksia. Hienojakoisessa mallissa enemmän kytkentöjä. Hajautetuissa järjestelmissä kovin hienojakoinen malli laskee todennäköisesti suorituskykyä. Karkeassa mallissa usein huono koheesio. Löydettävä sopiva kompromissi. -nbrchapters: long +addchapter(in posn: long, in Chapter chap) +getchapter(in long posn) : return Chapter Chapter -nbrparagraphs : long +addparagraph(in posn: long, in Paragraph para) +getparagraph(in long posn) : return Paragraph Paragraph -nbrsentences : long +addsentence(in posn: long, in Sentence sent) +getsentence(in long posn) : return Sentence <<seq>> Sentence String

20 Viestisekvenssikaavio edellisestä Parempi oliomalli :Client :Document :Chapter :Paragraph nbrchapters getchapter() nbrparagraphs() getparagraph() nbrsentences() getsentence() getsentence() getsentence() getparagraph()... Koko dokumentin läpikäyminen vaatii tolkuttoman määrän etämetodikutsuja Huono malli! ContentProvider +getcontent() : return Content Document -issection : boolean +getsubdocuments() : return Documents +getsecnames() : return SectionNames +getsec(in name : String) : return Document <<struct>> Content format: String data: <<any>> <<seq>> SectionNames String <<seq>> Documents Document

OHJ-5010 Hajautettujen järjestelmien perusteet

OHJ-5010 Hajautettujen järjestelmien perusteet OHJ-5010 Hajautettujen järjestelmien perusteet Arkkitehtuureista (1/2) Kari Systä Kari.systa@tut.fi 1 Yleistä Uusimman tiedon mukaan ensimmäinen tentti on 19.5.2012 kello 09-12. Kurssin kotisivuilla http://www.cs.tut.fi/~hajap/

Lisätiedot

Integrointi. Ohjelmistotekniikka kevät 2003

Integrointi. Ohjelmistotekniikka kevät 2003 Integrointi Ohjelmistotekniikka kevät 2003 ERP (Toiminnanohjausjärjestelmä) Myynti Henkilöstö, palkanlaskenta Kirjanpito Myynti Myyjät Extranet Tietovarasto Laskutus, reskontrat Asiakas ERP Asiakasrekisteri

Lisätiedot

ORB CORBA 101. Palvelinolio. Asiakasolio. Yleistä. Toiminta ja arkkitehtuuri. CORBA 101 Graafisten käyttöliittymien ohjelmointi 2000

ORB CORBA 101. Palvelinolio. Asiakasolio. Yleistä. Toiminta ja arkkitehtuuri. CORBA 101 Graafisten käyttöliittymien ohjelmointi 2000 GKO 16.11.2000 MIT Jyväskylän yliopisto CORBA 101 Jonne Itkonen jonne.itkonen@sonera.com Software Architectures Laboratory Mobile & Media Research Sonera (2004-8-6: Ylläoleva osoite ei enää toimi, enkä

Lisätiedot

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

JAVA-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ätiedot

Rajapinta (interface)

Rajapinta (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ätiedot

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 1 JAVA RMI Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko JavaRMI 2 Table of Contents...1 JAVA RMI...1 Yleistä...4 Arkkitehtuuri...5 Java RMI kerrosarkkitehtuuri...5

Lisätiedot

14. Poikkeukset 14.1

14. 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ätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion 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ätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

812341A 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ätiedot

Mikä yhteyssuhde on?

Mikä 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ätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A 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ätiedot

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

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

812347A 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ätiedot

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

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

Verkko-ohjemointia. TCP vs. UDP Socket, ServerSocket Datagrammit RMI

Verkko-ohjemointia. TCP vs. UDP Socket, ServerSocket Datagrammit RMI 15.3.2005 Verkko-ohjemointia TCP vs. UDP Socket, ServerSocket Datagrammit RMI 1 Javaa verkossa Sovelmat - appletit ajetaan www-selaimessa peritään jawa.awt.applet tai javax.swing.japlet (vrt. JFrame) http://java.sun.com/docs/books/tutorial/applet/

Lisätiedot

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 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ätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

16. Javan omat luokat 16.1

16. Javan omat luokat 16.1 16. Javan omat luokat 16.1 Sisällys Johdanto. Object-luokka: tostring-, equals-, clone- ja getclass-metodit. Comparable-rajapinta: compareto-metodi. Vector- ja ArrayList-luokat. 16.2 Javan omat luokat

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (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ätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

7. Oliot ja viitteet 7.1

7. Oliot ja viitteet 7.1 7. Oliot ja viitteet 7.1 Sisällys Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden sijoitus. Viitteiden vertailu. Varautuminen null-arvoon. Viite metodin paluuarvona. Viite metodin

Lisätiedot

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma. Välikoe / 20.3 Vastaa neljään (4) tehtävään. Jos vastaat 5:een, 4 huonointa arvostellaan. Kunkin tehtävän vastaus eri konseptille. 1. Pöytätesti Pöytätestaa seuraava ohjelma. Tutki ohjelman toimintaa pöytätestillä

Lisätiedot

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. 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ätiedot

TIE-20200 Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

TIE-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ätiedot

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

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: 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ätiedot

TIETORAKENTEET JA ALGORITMIT

TIETORAKENTEET JA ALGORITMIT TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle

Lisätiedot

Java kahdessa tunnissa. Jyry Suvilehto

Java 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ätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin 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ätiedot

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

812347A 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ätiedot

4. Luokan testaus ja käyttö olion kautta 4.1

4. 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ätiedot

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ä 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ätiedot

1. Olio-ohjelmointi 1.1

1. 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ätiedot

13 Operaattoreiden ylimäärittelyjä

13 Operaattoreiden ylimäärittelyjä 248 13 C++-kielessä voidaan operaattoreita ylimäärittää. Ylimääriteltävää operaattoria voidaan pitää ikäänkuin metodina, joka esitellään luokan esittelyssä ja määritellään luokan ulkopuolella kuten metoditkin.

Lisätiedot

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisä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ätiedot

Ohjelmistojen mallintaminen, sekvenssikaaviot

Ohjelmistojen mallintaminen, sekvenssikaaviot 582104 - Ohjelmistojen mallintaminen, sekvenssikaaviot 1 Vuorovaikutussuunnittelu Oliojärjestelmän toiminta perustuu olioiden vuorovaikutukseen ja yhteistyöhön Olioiden yhteistyö toteutuu operaatioiden

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1 12. Monimuotoisuus 12.1 Sisällys Johdanto. Periytymismekanismi määrittää alityypityksen. Viitteiden sijoitus ja vertailu. Staattinen ja dynaaminen luokka. Myöhäinen ja aikainen sidonta. Parametrinvälitys

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet String-merkkijonoluokka 1 Ohjelmointikielten merkkijonot Merkkijonot ja niiden käsittely on välttämätöntä ohjelmoinnissa Valitettavasti ohjelmointikielten tekijät eivät tätä ole ottaneet

Lisätiedot

Poikkeustenkäsittely

Poikkeustenkäsittely 1 Poikkeustenkäsittely Mitä poikkeustenkäsittely tarkoittaa? Poikkeuksen käsitteleminen Poikkeusluokkien hierarkia Poikkeuksen heittäminen 1 Mitä poikkeustenkäsittely tarkoittaa? Poikkeus (Exception) on

Lisätiedot

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

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

Lisätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely Poikkeukset Poikkeuksella tarkoitetaan yllättävää ajonaikaista tilannetta, joka

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. 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ätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisä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ätiedot

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

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

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

Sisä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ätiedot

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys Tällä kurssilla on tutustuttu ohjelmistojen mallintamiseen oliomenetelmiä ja UML:ää käyttäen Samaan aikaan järjestetyllä kurssilla on käsitelty

Lisätiedot

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 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ätiedot

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Olio-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ätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

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

A) 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ätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

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

Sisä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ätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

Lisätiedot

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl;

Demo 6 vastauksia. 1. tehtävä. #ifndef #define D6T1 H D6T1 H. #include <iostream> using std::ostream; using std::cout; using std::endl; Demo 6 vastauksia 1. tehtävä #ifndef #define D6T1 H D6T1 H #include using std::ostream; using std::cout; using std::endl; #include using std::string; 10 template class

Lisätiedot

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Sisä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. 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ätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin 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ätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A 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ätiedot

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

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

Lisätiedot

Attribuutit. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty.

Attribuutit. Copyright IT Press Tämän e-kirjan kopiointi, tulostaminen ja jakeleminen eteenpäin luvatta on kielletty. 8 Attribuutit Useimmat ohjelmointikielet on suunniteltu tavoitteena määrätty joukko ominaisuuksia. Kun esimerkiksi ryhdyt tekemään kääntäjää, mietit millainen uudella kielellä tehty sovellus on rakenteeltaan,

Lisätiedot

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Rajapinnasta 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ätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. 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ätiedot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Opintojakso 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ätiedot

Tietojärjestelmäarkkitehtuurit

Tietojärjestelmäarkkitehtuurit Tietojärjestelmäarkkitehtuurit ITK130 Johdatus ohjelmistotekniikkaan Syksy 2003 Sami Kollanus 1 Aluksi Tietojärjestelmäarkkitehtuurit vs. ohjelmistoarkkitehtuurit Pohjana Tietojärjestelmäarkkitehtuurit

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tenttikysymykset. + 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ätiedot

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus

Sisällys. 19. Olio-ohjelmointia Javalla. Yleistä. Olioiden esittely ja alustus Sisällys 19. Olio-ohjelmointia Javalla Olioiden esittely ja alustus. Metodit Yleistä metodeista. Mihin metodeja tarvitaan? Metodien määrittely. Omat metodit: nimeäminen, paikka, kutsuminen, parametrit

Lisätiedot

Olio-ohjelmointi Virhetilanteiden käsittely

Olio-ohjelmointi Virhetilanteiden käsittely Olio-ohjelmointi 2016 Virhetilanteiden käsittely Poikkeustilanteet n Java-järjestelmässä voidaan ottaa kiinni ohjelman suoritusaikana tapahtuvia virhetilanteita, joita ei saada kiinni tavanomaisilla ohjausrakenteilla

Lisätiedot

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 VIII Poikkeusten ja tapahtumien käsittely Sisältö 1. Poikkeusten käsittelyn käsitteitä ja suunnittelukriteerejä 2. Poikkeusten käsittely C++:ssa 3. Poikkeusten

Lisätiedot

4. Olio-ohjelmoinista lyhyesti 4.1

4. Olio-ohjelmoinista lyhyesti 4.1 4. Olio-ohjelmoinista lyhyesti 4.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 4.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

C++11 lambdat: [](){} Matti Rintala

C++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ätiedot

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Sisä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ätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

Lisätiedot

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

T740103 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ätiedot

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Ohjelmistoarkkitehtuurit Konnektorit ohjelmistoarkkitehtuurissa 18.9.2012 1 Konnektorit (connectors) Konnektori (connector) (liitos) Arkkitehtuurielementti, jonka tehtävänä on mahdollistaa ja hallita komponenttien

Lisätiedot

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 HSMT Tietokannoista Ville Leppänen HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32 Missä mennään... 1. Johdanto (1h) 2. Säikeet (2h) 3. Samanaikaisuudesta (2h) 4. Hajautetuista sovelluksista (1h)

Lisätiedot

9. Periytyminen Javassa 9.1

9. 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ätiedot

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream Tietovirrat ja niiden suunnat Output stream Koodi Tiedosto OutputStream ja InputStream OutputStream (abstrakti) FileOutputStream Tallennus tavuina ObjectOutputStream Olioiden tallennus FilterOutputStream

Lisätiedot