812347A Olio-ohjelmointi, 2015 syksy 2. vsk. V Geneerisyys
|
|
- Jaana Salminen
- 8 vuotta sitten
- Katselukertoja:
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 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ätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotDemo 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ätiedot12 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ätiedotSTL: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ätiedotGeneeriset 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ätiedotOlio-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ätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:
LisätiedotListarakenne (ArrayList-luokka)
Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen
LisätiedotMuuttujien 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ätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
LisätiedotMallit 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ätiedotOperaattoreiden 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ätiedot815338A 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ätiedotOhjelmassa 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ätiedotC++ 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ätiedotOlio-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ätiedot13 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ätiedotOhjelmoinnin 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ätiedotC++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi
1 C++11 Syntaksi Jari-Pekka Voutilainen 13.4.2012 2 Range-for Iteroi säiliön kaikki alkiot for-silmukassa. Säiliöltä vaaditaan begin- ja end-iteraattorit. Pätee kaikille C++11 STL-säiliöille, taulukoille,
LisätiedotTIETORAKENTEET 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ätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä
812347A Olio-ohjelmointi, 2015 syksy 2. vsk X Poikkeusten käsittelystä Sisältö 1. Yleistä poikkeusten käsittelystä 2. Poikkeuskäsittelyn perusteita C++:ssa 3. Standardissa määritellyt poikkeukset 4. Poikkeusvarmuus
LisätiedotJAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?
JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,
LisätiedotTaulukot. 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ätiedot1 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ätiedotint 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ätiedotEsimerkki 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ätiedotOlio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter
Olio-ohjelmointi Suunnittelumallit Adapter ja Composite Rakennemalleissa päähuomio kohdistetaan siihen, miten luokkia ja olioita yhdistellään muodostamaan laajempia rakenteita. Rakenteelliset luokkamallit
Lisätiedot812336A 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ätiedotStandardi 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ätiedotMetodien 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ätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja
LisätiedotJava-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ätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotOhjelmoinnin 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ätiedotOsoittimet. 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ätiedotFunktiomallit. 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ätiedot18. Abstraktit tietotyypit 18.1
18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
Lisätiedot812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite
2015 syksy 2. vsk VII Suunnittelumallit Adapter ja Composite Sisältö 1. Johdanto rakennemalleihin 2. Adapter (Sovitin) 3. Composite (Rekursiokooste) Suunnittelumallit Adapter ja Composite 2 VII.1 Johdanto
LisätiedotTietorakenteet. 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ätiedotTehtä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ätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotKääreluokat (oppikirjan luku 9.4) (Wrapper-classes)
Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi
LisätiedotLuokassa 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ätiedotSisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto
Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:
LisätiedotOhjelmointi 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ätiedotITKP102 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.
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ätiedotLyhyt 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ätiedotT740103 Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010
12. Periytyminen Johdantoa Käytännössä vähänkään laajemmissa ohjelmissa joudutaan laatimaan useita luokkia, joiden pitäisi pystyä välittämään tietoa toisilleen. Ohjelmien ylläpidon kannalta olisi lisäksi
LisätiedotMikä yhteyssuhde on?
1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String
LisätiedotJava-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ätiedotTTY 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ätiedotJava-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ätiedotOpintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap
Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Tietorakenneluokkia 2: HashMap, TreeMap Tietorakenneluokkia ja -rajapintoja Java tarjoaa laajan kokoelman tietorakennerajapintoja ja - luokkia. Aiemmin
Lisätiedot1.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ätiedotKää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ätiedot1 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ätiedotPino 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ätiedotOhjelmointiharjoituksia 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ätiedotOlion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();
Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio
LisätiedotSisä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ätiedot1. Olio-ohjelmointi 1.1
1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja
LisätiedotOlio-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ätiedotITKP102 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ätiedotKaksiloppuinen 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ätiedotITKP102 Ohjelmointi 1 (6 op)
ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat
LisätiedotUNIVERSITY 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ätiedotOhjelmoinnin 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ätiedotOperaattoreiden 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ätiedotC++11 lambdat: [](){} Matti Rintala
C++11 lambdat: [](){} Matti Rintala bool(*)(int) Tarve Tarve välittää kirjastolle/funktiolle toiminnallisuutta Callback-funktiot Virhekäsittely Käyttöliittymät Geneeristen kirjastojen räätälöinti STL:n
LisätiedotSisältö. 2. Taulukot. Yleistä. Yleistä
Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä
LisätiedotVIII. 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ätiedotTaulukot. 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ätiedot812347A 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ätiedotOliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä
Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä
LisätiedotJava kahdessa tunnissa. Jyry Suvilehto
Java kahdessa tunnissa Jyry Suvilehto Ohjelma Ohjelmointiasioita alkeista nippelitietoon n. 45 min Tauko 10 min Oliot, luokat ja muut kummajaiset n. 45 min Kysykää Sisältöä ei oikeasti ole 2x45 min täytteeksi,
LisätiedotLuokka 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ätiedotC-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ätiedotOhjelmoinnin 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ätiedotOperaattorin 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ätiedotYleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.
2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä
Lisätiedot1. 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ätiedotC++ 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ätiedotOhjelmointi 2 / 2010 Välikoe / 26.3
Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään
LisätiedotMetodit 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ätiedotTaulukot. 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ätiedotKompositio. 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ätiedotA) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)
1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden
Lisätiedot14. Poikkeukset 14.1
14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.
LisätiedotTietueet. 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ätiedotLuokat. 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ätiedotTehtä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ätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä
LisätiedotOlio-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ätiedot21. 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ätiedot11. 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ätiedotOhjelmointitaito (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ätiedotOsa. 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