812347A Olio-ohjelmointi, 2015 syksy 2. vsk. V Geneerisyys

Koko: px
Aloita esitys sivulta:

Download "812347A Olio-ohjelmointi, 2015 syksy 2. vsk. V Geneerisyys"

Transkriptio

1 812347A Olio-ohjelmointi, 2015 syksy 2. vsk V Geneerisyys

2 Sisältö 1. Johdanto geneerisyyteen 2. Geneeriset funktiot 3. Geneeriset luokat 4. Standard Template Library (STL) 5. IOStream-kirjasto A Olio-ohjelmointi, Geneerisyys 2

3 V.1 Johdanto geneerisyyteen Neljäs monimuotoisuuden muoto: tietotyyppien nimet monimuotoisia Tietotyypit parametreina Paradigma (Stroustrup): Decide which algorithms you want: parameterize them so that they work for a variety of suitable types and data structures Käännösaikaista monimuotoisuutta Kutakin esiintyvää konkreettista tyyppiä kohden kääntäjä tekee oman toteutuksen Yleisimmät sovelluskohteet Tyyppiriippumattomat algoritmit Tyyppiriippumattomat säiliöluokat (kokoelmat) A Olio-ohjelmointi, Geneerisyys 3

4 V.2 Geneeriset funktiot C++: geneerisyys ns. template-mekanismilla Esimerkki template <typename Type> Type pienempi(type t, Type u){ } if(t < u){ } return t; return u; Voidaan soveltaa mihin tahansa tietotyyppiin, joka toteuttaa operaattorin < Ohjelmassa int x=10, y=5; double d1=5.2, d2=8.2; pienempi(x,y); pienempi<double>(d1,d2); Kääntäjä tekee kaksi eri versiota funktiosta Tietotyyppi voidaan antaa eksplisiittisesti tai jättää kääntäjän pääteltäväksi A Olio-ohjelmointi, Geneerisyys 4

5 V.2.1 Geneeriset funktiot Javassa Javassa metodi voidaan määritellä geneeriseksi public static <T> String merkeiksi (T x){ } return x.tostring(); Tyypin rajoittaminen public static <T extends Comparable<T>> T pienempi (T x, T y){ } if(x.compareto(y)<0) //Voidaan varmasti kutsua return y; return x; A Olio-ohjelmointi, Geneerisyys 5

6 V.3 Geneeriset luokat Käytetään erityisesti säiliöluokkien ja tietorakenteiden toteuttamiseen Tyyppiturvallisuus ei tarvitse tehdä oletusta tietosäiliön olioiden tyypistä Ajonaikaiset virheet käännöksen aikaisiksi Selkeämpi luettavuus myös tyyppi näkyvissä A Olio-ohjelmointi, Geneerisyys 6

7 V.3.1 Geneeriset luokat: toteutus Käännösaikana Suorituksen aikana Parametriluokka Kirja Geneerinen Puutietorakenne KirjaPuu IntegerPuu Integer Parametriluokka Lähde: Lasse Harjumaan luentokalvot A Olio-ohjelmointi, Geneerisyys 7

8 V.3.2 Geneeriset luokat C++:ssa Geneerisestä luokasta käytetään myös nimitystä luokkamalli Luokkamallin kaikki funktiot ovat geneerisiä funktioita Luokkamallin olioita voidaan luoda vasta sen jälkeen kun tyyppiparametreille on annettu konkreettiset käytettävät tyypit Tällöin mallista on luotu ilmentymä tietylle tyypille Ilmentymä on tavallinen C++-luokka Tyyppiparametri voi olla mikä tahansa tietotyyppi A Olio-ohjelmointi, Geneerisyys 8

9 V Esimerkki C++: Pino malliluokkana enum PinoPoikkeus { PinoTyhja, PinoTaysi }; template<typename Type> class Pino { private: int koko; int paa; Type* pino; public: Pino(int k):koko(k),paa(0) { pino = new Type[koko]; } ~Pino(){delete[] pino;} void push(type); Type pop(); }; A Olio-ohjelmointi, Geneerisyys 9

10 V Esimerkki C++: Pino malliluokkana (2) template <typename Type> void Pino<Type>::push(Type elem){ if (paa == koko) throw PinoTaysi; pino[paa++] = elem; } template <typename Type> Type Pino<Type>::pop(){ if (paa == 0) throw PinoTyhja; return pino[--paa]; } HUOM! Koko koodi otsikkotiedostossa! A Olio-ohjelmointi, Geneerisyys 10

11 V Esimerkki C++: Pino malliluokkana (3) // Pääohjelmassa: #include PinoTemp.h // JNE.. Pino<double> dpino(3); dpino.push(1.2); dpino.push(-1.3); cout << dpino.pop() << endl; cout << dpino.pop() << endl; Pino<string> spino(3); spino.push("eka"); spino.push("toka"); cout << spino.pop() << endl; cout << spino.pop() << endl; dpino voi sisältää double-tyyppisiä lukuja A Olio-ohjelmointi, Geneerisyys 11

12 V C++: Luokkamallit ja alityypit Koodissa luokat class Luokka { }; // Luokan koodia class Aliluokka : public Luokka { }; Aliluokka on Luokan alityyppi Pääohjelmassa koodi Pino<Luokka> pino(2); Pino<Aliluokka> toinenpino(3); pino = toinenpino; // Luokan koodia Pino<Aliluokka> ei ole luokan Pino<Luokka> alityyppi: sijoitus ei ole sallittu A Olio-ohjelmointi, Geneerisyys 12

13 V.3.3 Geneeriset luokat Javassa Alun perin Javassa ei tyyppiparametreja Mukaan vasta versiossa 1.5 Ohjelmaa käännettäessä korvataan kaikki muodolliset tyyppiparametrit todellisilla parametreilla ja poistetaan kaikki geneerisyyteen viittaava Tehdään tyyppimuunnokset Tehdään tyyppitarkistukset Toteutus poikkeaa C++:n template-mekanismista A Olio-ohjelmointi, Geneerisyys 13

14 V Pino Javalla class Pino<T> { private int koko; private int paa; private T[] pino; public Pino(int k){ koko = k; paa = 0; // HUOMAA ERO C++:aan pino = (T[])new Object[koko]; } public void push(t elem){ if (paa == koko){ throw new PinoPoikkeus("Pino täysi"); } pino[paa++] = elem; } A Olio-ohjelmointi, Geneerisyys 14

15 V Pino Javalla (2) public T pop(){ if (paa == 0){ throw new PinoPoikkeus("Pino tyhjä"); } return pino[--paa]; } public boolean empty(){ } return (paa==0); public boolean full(){ return (paa==koko); } } // Luokan Pino loppu A Olio-ohjelmointi, Geneerisyys 15

16 V Pino Javalla (3) Pääohjelmassa // Pino jossa Double-olioita Pino<Double> dpino = new Pino<Double>(3); dpino.push(new Double(1.2)); System.out.println(dPino.pop().doubleValue()); // Pino jossa String-olioita Pino<String> spino = new Pino<String>(3); spino.push("eka"); System.out.println(sPino.pop()); HUOM: Todellisen tyyppiparametrin oltava olio (ei perustietotyyppi) A Olio-ohjelmointi, Geneerisyys 16

17 V.3.4 Tyyppiparametrin rajoittaminen ja jokerit (wild cards) Javassa C++:ssa ei voi rajoittaa tyyppiparametria Javassa rajoittaminen mahdollista, esim. class Pino<T extends Number> Mahdollista käyttää vain luokasta Number periytyviä tyyppiparametreja Javassa jokerilla? voidaan esittää tuntematonta parametrityyppiä, esim. metodi static void printandclear(pino<?> stack) { } // Voidaan kutsua millä tahansa Pino-tyypillä A Olio-ohjelmointi, Geneerisyys 17

18 V.4 Standard Template Library Yleiskäyttöinen geneeristen algoritmien ja tietorakenteiden kirjasto Mukana lähes standardoimisprosessin alusta Tarkoituksena tarjota valmiit standardoidut ratkaisut tehokkaiden ja siirrettävien ohjelmien tekemiseen Yleisesti käytetty kirjaston perusta SGI:n tekemä ennen kuin C++ standardoitiin Ks. myös A Olio-ohjelmointi, Geneerisyys 18

19 V.4.1 STL:n komponentit Kirjaston pääkomponentit 1. Kokoelmat eli tietosäiliöt (taulukot, listat jne.) 2. Selaajat eli iteraattorit (kokoelmien selaamiseen) 3. Algoritmit (lajitteluun, etsimiseen jne.) Näiden lisäksi 1. Funktio-olioita Olioita, jotka käyttäytyvät kuin funktiot 2. Sovittimia eli adaptereita Vaihtavat toisen komponentin liittymää A Olio-ohjelmointi, Geneerisyys 19

20 V.4.2 STL:n kokoelmat Kokoelmia käytetään hallitsemaan oliojoukkoja Eri tyyppisiä eri tarkoituksiin Peräkkäisrakenteiset kokoelmat [* = c++11] 1. vector 4. forward_list * 2. deque 5. array * 3. list Assosiatiiviset (avainrakenteiset) kokoelmat 1. set 2. multiset 3. map 4. multimap 5. unordered_set * 6. unordered_map * 7. unordered_multiset * 8. unordered_multimap * A Olio-ohjelmointi, Geneerisyys 20

21 V.4.2 STL:n kokoelmat (2) Kokoelmasovittimet: toteuttavat tietorakenteen jonkin toisen tietorakenteen avulla 1. stack 2. queue 3. priority_queue Muiden tietorakenteiden (puut, verkot jne) toteuttamiseen olemassa kirjastoja Esimerkiksi boost ( A Olio-ohjelmointi, Geneerisyys 21

22 V Peräkkäiskokoelmat Jokaisella kokoelmalla on seuraavat julkiset metodit size() kokoelman alkioiden lukumäärä empty() onko kokoelma tyhjä? max_size() suurin mahdollinen koko begin() selaaja säiliön ensimmäiseen alkioon end() selaaja säiliön viimeisen alkion jälkeiseen alkioon rbegin() selaaja säiliön viimeiseen alkioon rend() selaaja säiliön ensimmäistä edeltävään alkioon sijoitusoperaattori A Olio-ohjelmointi, Geneerisyys 22

23 V Peräkkäiskokoelmat: vector vector<t> määrittelee dynaamisen taulukon Alkiot kaikki samaa tyyppiä T, joka määritellään käännösaikana Määritelty otsikkotiedostossa <vector> Esimerkki: kokonaislukuvektorin määritteleminen: vector<int> luvut; typedef vector<int> IntTaulu; IntTaulu luvut2; Voidaan käyttää sisäisten taulukkojen sijasta A Olio-ohjelmointi, Geneerisyys 23

24 V Peräkkäiskokoelmat: vectorin metodeja Metodi size() empty() max_size() capacity() reserve(int n) resize(int n) Kuvaus Alkioiden lukumäärä vektorissa Onko vektori tyhjä vai ei Suurin mahdollinen koko Suurin mahdollinen koko ilman uutta muistinvarausta Varaa tilaa n:lle alkiolle Luo uusia alkioita, jos n > size tai tuhoaa niitä, jos n < size A Olio-ohjelmointi, Geneerisyys 24

25 V Peräkkäiskokoelmat: vectorin luku/kirjoitusmetodeja Metodi Kuvaus operator[] at front back insert Palauttaa n:nnen alkion Heittää n:nnen alkion indeksitarkistuksen jälkeen poikkeuksen std::out_of_range, jos indeksi ei ole vektorin alueella Palauttaa ensimmäisen alkion Palauttaa viimeisen alkion Lisää väliin yhden tai useamman alkion A Olio-ohjelmointi, Geneerisyys 25

26 V Peräkkäiskokoelmat: vectorin luku/kirjoitusmetodeja (2) erase clear assign push_back operator= swap Poistaa yhden tai useamman alkion Tyhjentää vektorin Kopioi tietyt alkiot tai asettaa n kpl tiettyä arvoa Lisää viimeiseksi alkioksi Kopioi vectorin Vaihtaa sisältöjä A Olio-ohjelmointi, Geneerisyys 26

27 V Peräkkäiskokoelmat: deque Määritelty otsikkotiedossa <deque> Mallintaa kahdesta päästä avoimen listan Toteutettu yleensä taulukoiden taulukkona Samat jäsenfunktiot kuin luokassa <vector> Lisäksi push_front pop_front A Olio-ohjelmointi, Geneerisyys 27

28 V Peräkkäiskokoelmat: list Määritelty otsikkotiedostossa <list> Määrittelee kahteen suuntaan linkitetyn listan Ei määritelty operaattoria [] tai at() - jäsenfunktiota A Olio-ohjelmointi, Geneerisyys 28

29 V Peräkkäiskokoelmat: array Lisätty standardiin C++11 Otsikkotiedosto <array> Kapseloi sisäänsä kiinteämittaisen taulukon -> tehokkaampi kuin vector Etuja: Kokoelma tuntee alkioiden lukumäärän -> ei tarvitse välittää erikseen funktiolle Voidaan käyttää kokoelmien ominaisuuksia, esim. selaajat A Olio-ohjelmointi, Geneerisyys 29

30 V Selaajat Osoitinolioita, joita STL:n -algoritmit käyttävät kokoelmien alkioiden käsittelyssä Siis älykkäitä osoittimia Jokainen kokoelma määrittelee selaajansa Yleensä kokoelmaluokan sisäisenä luokkana Ei tarvita omia otsikkotiedostoja selaajien käyttöön Jokaisella selaajalla on seuraavat toiminnot *iter, alkion lukemiseen ja/tai kirjoittamiseen ++iter, selaajan siirtämiseen iter == iter1, vertailu kahden selaajan välillä A Olio-ohjelmointi, Geneerisyys 30

31 Esimerkki: vector ja sen selaaja #include <vector> // vectorin määrittely vector<double> numbers; // Lisätään vectoriin kaksi lukua numbers.push_back(12.1); numbers.push_back(8.2); double sum = 0; // vectorin selaaja vector<double>::iterator iter; // Lasketaan vectorin alkioiden summa for(iter = numbers.begin(); iter!= numbers.end(); iter++){ } sum += *iter; A Olio-ohjelmointi, Geneerisyys 31

32 Esimerkki: array // Geneerinen funktio joka tulostaa arrayn template <typename Type, size_t Size> void tulostaarray(const std::array<type,size> &taulu) { } for(int i = 0; i < taulu.size(); i++){ std::cout << "taulukko[" << i <<"] = " << taulu[i] << std::endl; } // Pääohjelmassa std::array<int,5> intarray = {15, 28, 11, 56, 31}; tulostaarray(intarray); A Olio-ohjelmointi, Geneerisyys 32

33 V.5. IOStream-kirjasto IOStream-kirjasto käyttää virtapohjaista (vuopohjaista) tiedonsiirtoa Datan voidaan ajatella koostuvan virrasta samankokoisista yksiköistä Yksiköt voivat olla esim. tavuja tai merkkejä Luku- ja tulostustoiminnot voidaan ajatella käsitteellisesti olevan merkkien/tavujen virtaa ohjelmasta tai ohjelmaan A Olio-ohjelmointi, Geneerisyys 33

34 V.5.1 IOStream-kirjaston luokista Yleiset I/O luokat basic_istream<t>, basic_ostream<t>, basic_iostream<t> Ovat siis luokkamalleja Kertovat sen kuinka I/O toiminnot tehdään mutta eivät sitä kuinka käytetään ulkoista laitetta Ohjelmissa käytetään merkkityyppiin erikoistettuja luokkia istream, ostream, iostream A Olio-ohjelmointi, Geneerisyys 34

35 V.5.1 IOStream-kirjaston luokista (2) Tiedosto I/O luokat basic_ifstream, tiedoston lukemista varten basic_ofstream, tiedostoon kirjoittamista varten basic_fstream, luku/kirjoitus toimintoja varten String I/O käyttää string-oliota puskurina basic_istringstream basic_ostringstream basic_stringstream Kaikki edellä mainitut luokkamalleja, ohjelmissa merkkityyppiin erikoistettuja ifstream, ofstream, fstream, istringstream, ostringstream, stringstream A Olio-ohjelmointi, Geneerisyys 35

36 V.5.2 Lukeminen ja kirjoittaminen Tapahtuu operaattoreiden << ja >> avulla Operaattorit määritelty Jäsenfunktiona sisäisille tyypeille Funktiona merkeille (char) ja merkkijonoille (char*, char[]) Funktioina muille standardikirjaston tyypeille basic_string, string, complex jne Operaattorit ylikuormitettava omille tyypeille, jos halutaan käyttää A Olio-ohjelmointi, Geneerisyys 36

37 V.5.3. Tietovuon tila Ilmoittaa 1. Onko edellinen toiminta virheetön vai ei 2. Onko virta sisäisesti eheä Virtaan kohdistuvat toimenpiteet eivät pääsääntöisesti tee mitään jos virta ei ole toimintakuntoinen Tilaliput ilmoittavat vuon tilan: goodbit Tarkoittaa, että mikään lippu ei ole asetettu: Tällöin virta on virheettömässä tilassa eli toimintakuntoinen eofbit Ilmoittaa, että ollaan päädytty loppuun A Olio-ohjelmointi, Geneerisyys 37

38 V.5.3. Tietovuon tila (2) failbit ilmoittaa että toiminto on päättynyt virheellisesti Vuo on muuten kunnossa badbit ilmoittaa että vuon eheys on kadonnut Ei yleensä voi ohjelmassa korjata Jokaista tilabittiä (failbit, badbit, eofbit) vastaa booltyyppinen vakiojäsenfunktio bool fail(), bool bad(), bool eof() Vielä bool good() == true jos kaikki tilabitit alhaalla A Olio-ohjelmointi, Geneerisyys 38

39 V.5.3. Tietovuon tila (3) Voidaan tutkia suoraan käyttäen virtaolioita if (file) // jos file-tiedostovirtaolio on kunnossa if (!file) // jos file-tiedostovirtaolio ei ole kunnossa Virtaolio voidaan asettaa tilaan goodbit käyttäen jäsenfunktiota clear() Jos on luettu virhesyöte, on tilaa palautettaessa syytä tyhjentää syöte metodilla ignore() A Olio-ohjelmointi, Geneerisyys 39

40 Esimerkki: Oman luokan tulostaminen // Henkilo.h #include <iostream> class Henkilo { }; private: public: std::string etunimi; std::string sukunimi; std::string sotu; Henkilo(std::string en,std::string sn,std::string stu); // Hajotin, saanti- ja asetusmetodit // Ylikuormitettu tulostusoperaattori std::ostream& operator<<(std::ostream &os, const Henkilo &h); A Olio-ohjelmointi, Geneerisyys 40

41 Esimerkki: Oman luokan tulostaminen (2) // Henkilo.cpp Henkilo::Henkilo(std::string en,std::string sn,std::string stu): etunimi(en),sukunimi(sn),sotu(stu){ } // JNE // Ylikuormitetun tulostusoperaattorin toteutus // Ei ole jäsenfunktio -> käytettävä saantimetodeja std::ostream& operator<<(std::ostream &os, } const Henkilo &h){ os << h.getetunimi() <<" "<< h.getsukunimi() << std::endl; os << h.getsotu(); return os; A Olio-ohjelmointi, Geneerisyys 41

42 Esimerkki: Oman luokan tulostaminen (3) Pääohjelmassa #include <iostream> #include "henkilo.h" using namespace std; int main() { Henkilo h("aku", "Ankka"," "); Henkilo eco("umberto","eco"," "); cout << h << endl << eco << endl; // JNE A Olio-ohjelmointi, Geneerisyys 42

43 Esimerkki: Oman luokan lukeminen Lisätään edellä olevaan koodiin // Henkilo.h: Ylikuormitettu lukuoperaattori std::istream& operator>>(std::istream &is, Henkilo &h); // Henkilo.cpp: Lukuoperaattorin toteutus std::istream& operator>>(std::istream &is, } Henkilo &h){ std::string enimi="";std::string sunimi=""; std::string sotu=""; is >> enimi >> sunimi >> sotu; h = Henkilo(enimi, sunimi, sotu); return is; A Olio-ohjelmointi, Geneerisyys 43

44 Esimerkki: Oman luokan lukeminen (2) Pääohjelmassa #include <iostream> #include "henkilo.h" using namespace std; int main() { Henkilo h("", "", ""); cout << h << endl << eco << endl; cout << "Anna henkilon tiedot" << endl; cin >> h; // JNE A Olio-ohjelmointi, Geneerisyys 44

45 V.5.4 Tiedosto I/O Tiedostovirtaluokat mahdollistavat I/O toimenpiteet tiedostoihin (tai tiedoston kaltaisiin laitteisiin) Tiedosto on avattava ennen kuin sitä voidaan käsitellä Tiedosto on suljettava käytön jälkeen Tiedosto määritellään käyttäen merkkijonoa, joka esittää tiedoston nimeä Sallitut nimet käyttöjärjestelmäkohtaiset Tiedostovirtaoliot voivat olla kahdessa tilassa Suljettu (closed), virtaoliolla ei ole viittausta ulkopuoliseen tiedostoon. Avattu (opened), virtaolio on toimintakuntoinen A Olio-ohjelmointi, Geneerisyys 45

46 V.5.4 Tiedosto I/O (2) Tiedoston avaamisen kaksi tapaa Virtaolion muodostimen avulla Virtaolion metodin open() avulla Jos tiedoston avaamisessa virhe, asetetaan failbit Jos avaus onnistunut Jäsenfunktio is_open() palauttaa arvon true Jäsenfunktio fail() palauttaa arvon false Tiedosto voidaan avata monella tavalla Esim. vain lukemista varten Säädellään avauslipuilla, ei käsitellä tässä tarkemmin Virtaolion hajotin sulkee tiedoston A Olio-ohjelmointi, Geneerisyys 46

47 Esimerkki: Tiedoston käsittely #include <iostream> #include <fstream> // ofstream, ifstream,fstream #include <vector> #include <string> using namespace std; typedef vector<int> IntTaulu; bool tallenna(const string& nimi, const IntTaulu& luvut); bool lataa(const string& nimi, IntTaulu& luvut); A Olio-ohjelmointi, Geneerisyys 47

48 Esimerkki: Tiedoston käsittely (2) // vector-kokoelman arvojen tallennus tiedostoon bool tallenna(const string& nimi, const IntTaulu& luvut) { ofstream file(nimi.c_str()); for (int i = 0; file.good() && i < luvut.size(); ++i) { file << luvut[i] << ; if (0 == i % 20) file << endl; } return file.good(); } A Olio-ohjelmointi, Geneerisyys 48

49 Esimerkki: Tiedoston käsittely (3) // Tiedoston lukujen lukeminen vector-kokoelmaan bool lataa(const string& nimi, IntTaulu& luvut) { luvut.clear(); ifstream file(nimi.c_str()); while (file.good() &&!file.eof()) { int luku; file >> luku; if (file.good()) luvut.push_back(luku); } return file.good() file.eof(); } A Olio-ohjelmointi, Geneerisyys 49

50 V.5.5 Muistipohjainen I/O Käytetään stringstream-luokkia Määritelty otsikkotiedostossa <sstream> Voidaan alustaa joko alkuarvon kanssa tai ilman Alkuarvo kopioidaan sisäiseen puskuriin (string) Kun vuohon kirjoitetaan, puskuria kasvatetaan tarvittaessa Puskurin sisältö (string) voidaan millä tahansa hetkellä lukea jäsenfunktiolla str() Voidaan käyttää tyypinmuunnoksena muuntamaan tietotyyppi merkkijonoksi ja päinvastoin Voidaan käyttää apuna syötteen jäsentämisessä A Olio-ohjelmointi, Geneerisyys 50

51 Esimerkki. stringstream: tietotyypin arvon muuttaminen merkkijonoksi template<class T> string converttostring(const T& t) { } stringstream strm; strm << t; return strm.str(); A Olio-ohjelmointi, Geneerisyys 51

52 Esimerkki. stringstream: merkkijonon muuttaminen tietotyypin arvoksi template <typename T> T convertfromstring(const string& str) { } stringstream strm(str) T tmp; strm >> tmp; return tmp; A Olio-ohjelmointi, Geneerisyys 52

Olio-ohjelmointi Geneerisyys. 1. Johdanto

Olio-ohjelmointi Geneerisyys. 1. Johdanto Olio-ohjelmointi Geneerisyys Aiemmin käsiteltiin kolme monimuotoisuuden muotoa. Tässä osassa tutustutaan niistä neljänteen geneerisyyteen. Esitys perustuu pääosin teoksen [Bud] lukuun 18. Java-kielen geneerisyyden

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

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 Mallit (Templates)

12 Mallit (Templates) 12 Mallit (Templates) Malli on määrittely, jota käyttämällä voidaan luoda samankaltaisten aliohjelmien ja luokkien perheitä. Malli on ohje kääntäjälle luoda geneerisestä tyyppiriippumattomasta ohjelmakoodista

Lisätiedot

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka

STL:n uudistukset. Seppo Koivisto TTY Ohjelmistotekniikka STL:n uudistukset Seppo Koivisto TTY Ohjelmistotekniikka 2012-05-04 Sisältö 1 Muutokset säiliöihin ja uudet säiliötyypit 2 3 4 5 STL:n säiliöt Viitteet ja osoittimet ovat muuttuneet: Allocator::reference

Lisätiedot

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö. Geneeriset luokat C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet Geneerinen luokka tarkoittaa parametroitua luokkamallia, jonka avulla voidaan muodostaa useita,

Lisätiedot

Olio-ohjelmointi Syntaksikokoelma

Olio-ohjelmointi Syntaksikokoelma C++-kielen uusia ominaisuuksia Olio-ohjelmointi Syntaksikokoelma 31.10.2008 Bool-tietotyyppi: Totuusarvo true (1), jos ehto on tosi ja false (0) jos ehto epätosi. Dynaaminen muistinvaraus: Yhden muuttuja

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

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

Muuttujien roolit Kiintoarvo cin >> r;

Muuttujien roolit Kiintoarvo cin >> r; Muuttujien roolit Muuttujilla on ohjelmissa eräitä tyypillisiä käyttötapoja, joita kutsutaan muuttujien rooleiksi. Esimerkiksi muuttuja, jonka arvoa ei muuteta enää kertaakaan muuttujan alustamisen jälkeen,

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

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

Mallit standardi mallikirjasto parametroitu tyyppi

Mallit standardi mallikirjasto parametroitu tyyppi Mallit 18 Mallit Malli on tehokas mekanismi uusien luokkien generoimiseksi automaattisesti. Standardikirjaston suuri osa, standardi mallikirjasto, rakentuu kokonaan mallien määrittelymahdollisuuden ympärille,

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

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

Olio-ohjelmointi 2. välikoe HYV5SN

Olio-ohjelmointi 2. välikoe HYV5SN Olio-ohjelmointi 2. välikoe 27.4.2007 HYV5SN 1. Tee ohjelma, joka sisältää laatikko-luokan. Luokan tietojäseninä ovat laatikon syvyys, leveys ja korkeus. Toteuta luokkaan muodostin, jonka avulla olio voidaan

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

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

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

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

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

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu Taulukot Taulukon määrittely ja käyttö Taulukko metodin parametrina Taulukon sisällön kopiointi toiseen taulukkoon Taulukon lajittelu esimerkki 2-ulottoisesta taulukosta 1 Mikä on taulukko? Taulukko on

Lisätiedot

1 C++:n standardikirjasto

1 C++:n standardikirjasto TIE-20100 Tietorakenteet ja algoritmit 1 1 C++:n standardikirjasto Tässä luvussa käsitellään C++:n standardikirjaston tietorakenteita ja algoritmeja. Tarkoituksena on käsitellä sellaisia asioita, jotka

Lisätiedot

int puts(char *buff) Kirjoittaa puskurissa buff \0 :lla päätetyn merkkijonon standarditulostukseen. Formatoitu konsoli-i/o Tiedostot

int puts(char *buff) Kirjoittaa puskurissa buff \0 :lla päätetyn merkkijonon standarditulostukseen. Formatoitu konsoli-i/o Tiedostot 1. Standardikirjasto Ohjelmankehitysympäristössä on joukko kirjastoituja funktioita. on joukko otsikkotiedostoja, joissa on kirjastofunktioiden prototyypit (esittelyt) ja tarvittavien vakioiden, tietotyyppien

Lisätiedot

Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto

Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto Tässä materiaalissa tutustutaan tarkemmin C++:n luokkahierarkiaan. Koska kyseessä on oliopohjainen kieli, C++:n luokat on järjestetty hierarkisesti

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

812336A C++ -kielen perusteet, 21.8.2010

812336A C++ -kielen perusteet, 21.8.2010 812336A C++ -kielen perusteet, 21.8.2010 1. Vastaa lyhyesti seuraaviin kysymyksiin (1p kaikista): a) Mitä tarkoittaa funktion ylikuormittaminen (overloading)? b) Mitä tarkoittaa jäsenfunktion ylimääritys

Lisätiedot

Standardi mallikirjasto

Standardi mallikirjasto Standardi mallikirjasto 20 Standardi mallikirjasto Kuten jo tiedätkin C++ sisältää laajan standardikirjaston, joka yksinkertaistaa monia ohjelmointitehtäviä. Tähän saakka näkemäsi lisäksi tämä kirjasto

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

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

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

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

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Osoittimet. Mikä on osoitin?

Osoittimet. Mikä on osoitin? Osoittimet 7 Osoittimet On aika siirtyä käsittelemään osoittimia, C++:lle elintärkeätä ominaisuutta. Osoittimet ovat tärkeitä, koska ne luovat perustan muistin dynaamiselle varaukselle ja käytölle. Ne

Lisätiedot

Funktiomallit. 10.1 Funktiomallin määrittely

Funktiomallit. 10.1 Funktiomallin määrittely 10 Funktiomallit Tässä luvussa kuvataan, mikä funktiomalli on, ja tuodaan esille, kuinka niitä määritellään ja käytetään. Funktiomallin käyttö on melko yksinkertaista ja monet aloittelevat C++-ohjelmoijat

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. 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ä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

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public) Tietorakenteet JAVA-OHJELMOINTI Osa 5: Tietorakenteita Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Olioita ja tietoja voidaan organisoida määrämuotoisiksi tietorakenteiksi Hyödyllisiä

Lisätiedot

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu:

Tehtävä 1. TL5302 Olio-ohjelmointi Koe Malliratkaisuja. Tässä sekä a)- että b)-kohdan toimiva ratkaisu: TL5302 Olio-ohjelmointi Koe 19.4.2005 Malliratkaisuja Tehtävä 1 Tässä sekä a)- että b)-kohdan toimiva ratkaisu: #include using namespace std; int main() int taul[5]=1,2,3,4,5; int *p,&r=taul[0];

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

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

Osoitin ja viittaus C++:ssa

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

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

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

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat:

Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: 1. Luokan jäsenet Luokassa määriteltävät jäsenet ovat pääasiassa tietojäseniä tai aliohjelmajäseniä. Luokan määrittelyyn liittyvät varatut sanat: class luokan_nimi tyypit: enum, struct, class, typedef

Lisätiedot

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

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

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi. 1. Johdanto 1.1 Yleistä Suurten ohjelmien organisointi vaikeaa C:ssä. 1980 Stroustrup lisäsi C:hen olio-ohjelmoinnin (OOP = Object Oriented Programming). C C++: C-ohjelma on (muutamia poikkeuksia lukuunottamatta)

Lisätiedot

Lyhyt kertaus osoittimista

Lyhyt kertaus osoittimista , syksy 2007 Kertausta Luento 10 12.10.2007 Syksy 2007 1 Lyhyt kertaus osoittimista char *p; /* char, int, jne ilmoittavat, minkä tyyppisiä */ Keskusmuisti int *q; /* olioita sisältäviin muistilohkoihin

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

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

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

TTY Ohjelmointi I & II C++-kirjastoreferenssi versio 2.2

TTY Ohjelmointi I & II C++-kirjastoreferenssi versio 2.2 TTY Ohjelmointi I & II C++-kirjastoreferenssi versio 2.2 Copyright 2002 2009 Ari Suntioinen aps@cs.tut.fi #include int EXIT_SUCCESS main-funktion paluuarvo int EXIT_FAILURE ok- ja virhetilanteessa.

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

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

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ... 1. Tietorakenteet Tietorakenteet organisoivat samankaltaisten olioiden muodostaman tietojoukon. Tämä järjestys voidaan saada aikaan monin tavoin, esim. Keräämällä oliot taulukkoon. Liittämällä olioihin

Lisätiedot

Kääntäjän virheilmoituksia

Kääntäjän virheilmoituksia OHJ-1101 Ohjelmointi 1e 2008-09 1 Kääntäjän virheilmoituksia Kun progvh2 ohjelma käännetään antaa tutg++ seuraavat virheilmoitukset ja varoitukset: proffa> tutg++ progvh2.cc progvh2.cc:29:13: warning:

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

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

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

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

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

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

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

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

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

UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE

UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE 1 UNIVERSITY OF OULU DEPARTMENT OF INFORMATION PROCESSING SCIENCE OPETUSMONISTEET SARJA C11 JUUSTILA ANTTI KETTUNEN HARRI KILPI TEEMU RÄISÄNEN TONI VESANEN ARI C++- OHJELMOINTIKURSSIN OHEISMATERIAALI ISBN

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot

Operaattoreiden uudelleenmäärittely

Operaattoreiden uudelleenmäärittely Operaattoreiden uudelleenmäärittely 14 Operaattoreiden uudelleenmäärittely Tässä luvussa käsittelemme, kuinka voit lisätä toiminnallisuutta luokkiisi, jotta ne toimivat enemmän C++:n perustietotyyppien

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

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII Liitteet Liitteet A B C Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII A. Liite Operaattoreiden suoritusjärjestys On tärkeää ymmärtää, että operaattoreilla on prioriteettinsa,

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. I Johdanto ohjelmointiin C++kielellä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. I Johdanto ohjelmointiin C++kielellä 812347A Olio-ohjelmointi, 2015 syksy 2. vsk I Johdanto ohjelmointiin C++kielellä Sisältö 1. C++-kielen lyhyt historia 2. C++-kielen ominaisuuksia tiivistettynä 3. Peruskäsitteitä 4. C++-ohjelman looginen

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

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

Lisätiedot

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

Operaattorin ylikuormitus ja käyttäjän muunnokset

Operaattorin ylikuormitus ja käyttäjän muunnokset 13 Operaattorin ylikuormitus ja käyttäjän muunnokset Luvussa 7, "Ominaisuudet, taulukot ja indeksoijat," opit, miten luokan yhteydessä käytetään ohjelmallisesti []-operaattoria, jolloin objektia voidaan

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

1. C++:n STL-kirjasto

1. C++:n STL-kirjasto 1. C++:n STL-kirjasto C-kielen ongelma on, että taulukkojen koot on tiedettävä etukäteen. Lisäksi C ei tarjoa mitään keinoa automaattiseen indeksin tarkistukseen. Toisin sanoen on täysin ohjelmoijan vastuulla,

Lisätiedot

C++ tukee myös kaksoistarkkuuden ja yhden tarkkuuden liukulukutietotyyppejä:

C++ tukee myös kaksoistarkkuuden ja yhden tarkkuuden liukulukutietotyyppejä: 2 Matka C++-kieleen Luku alkaa katsauksella tukeen, jota C++-kielellä on tarjota taulukkotyypille tarkoittaa peräkkäistä kokoelmaa yhdentyyppisiä elementtejä, kuten kokonaislukuarvojen taulukkoa, joka

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

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

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet Metodit Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin return; -lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua Metodi voi palauttaa alkeistyypin tai olion Tällöin

Lisätiedot

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko 5 Taulukot Tämän osan sisältö Taulukon esittely ja luonti Taulukon alustaminen Taulukon koko Taulukon käsittely indeksointi peräkkäiskäsittely hajakäsittely harva taulukko Taulukon järjestäminen Kaksiulotteinen

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

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

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

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

Luokat. Luokat ja olio-ohjelmointi

Luokat. Luokat ja olio-ohjelmointi Luokat 12 Luokat Tässä luvussa laajennamme edellisessä luvussa käsittelemäämme struktuurityyppiä ja siirrymme yhteen C++-ohjelmoijan kaikkein tärkeimmistä välineistä: luokkiin. Käsittelemme myöskin joitakin

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

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

Olio-ohjelmointi Poikkeusten käsittelystä. 1. Johdanto

Olio-ohjelmointi Poikkeusten käsittelystä. 1. Johdanto Olio-ohjelmointi Poikkeusten käsittelystä Virheiden käsittely liittyy olennaisesti kaikkeen ohjelmointiin. Monissa sovelluksissa virhetilanteiden käsittelemiseen liittyvää koodia on merkittävä osuus koko

Lisätiedot

21. oppitunti. Esikäsittelijä. Osa. Esikäsittelijä ja kääntäjä

21. oppitunti. Esikäsittelijä. Osa. Esikäsittelijä ja kääntäjä Osa VI 21. oppitunti Esikäsittelijä Lähdekooditiedostoihin kirjoitetaan pääosin C++ -koodia. Ne käännetään kääntäjän toimesta ajettaviksi ohjelmiksi. Ennen kääntäjän osallisuutta ajetaan kuitenkin esikäsittelijä,

Lisätiedot

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus?

11. oppitunti III. Viittaukset. Osa. Mikä on viittaus? Osa III 11. oppitunti Viittaukset Kahdessa viime luvussa opit käyttämään osoittimia kohteiden käsittelyyn vapaalla muistialueella sekä viittaamaan noihin kohteisiin epäsuorasti. Tässä luvussa käsiteltävät

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

Osa. Erikoisaiheet. Oppitunnit 20 Erikoisluokat ja -funktiot 21 Esikäsittelijä

Osa. Erikoisaiheet. Oppitunnit 20 Erikoisluokat ja -funktiot 21 Esikäsittelijä Osa VI Erikoisaiheet Oppitunnit 20 Erikoisluokat ja -funktiot 21 Esikäsittelijä Osa VI 20. oppitunti Erikoisluokat ja -funktiot C++ tarjoaa useita keinoja rajoittaa muuttujien ja osoittimien näkyvyysaluetta

Lisätiedot