Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Hasonló dokumentumok
Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Bevezetés a programozásba előadás: Öröklődés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a programozásba Előadás: A const

Bevezetés a programozásba Előadás: Fordítási egység

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Osztály és objektum fogalma

Kivételkezelés a C++ nyelvben Bevezetés

Programozási alapismeretek 4.

Alprogramok, paraméterátadás

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

OOP #14 (referencia-elv)

Osztályok. 4. gyakorlat

Programozási nyelvek Java

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

ISA szimulátor objektum-orientált modell (C++)

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Java programozási nyelv 4. rész Osztályok II.

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

C++ programozási nyelv

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozás C++ -ban

és az instanceof operátor

3. Osztályok II. Programozás II

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Pénzügyi algoritmusok

Programozás II. 4. Dr. Iványi Péter

Programozási nyelvek Java

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

OOP #1 (Bevezetés) v :39:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Objektumorientált paradigma és programfejlesztés Bevezető

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Java és web programozás

A C programozási nyelv IV. Deklaráció és definíció

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

C++ programozási nyelv Konstruktorok-destruktorok

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Már megismert fogalmak áttekintése

C++ programozási nyelv Struktúrák a C++ nyelvben

Objektumorientált programozás C# nyelven

Bevezetés a programozásba. 9. Előadás: Rekordok

Objektumorientált szoftverfejlesztés alapjai

Pénzügyi algoritmusok

Objektumelvű programozás

4. Öröklődés. Programozás II

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

JAVA PROGRAMOZÁS 2.ELŐADÁS

Programozás II gyakorlat. 4. Öröklődés

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

Öröklés és Polimorfizmus

C++ programozási nyelv

C programozási nyelv

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java programozási nyelv

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Memóriakezelés, dinamikus memóriakezelés

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Java és web programozás

Inczédy György Középiskola, Szakiskola és Kollégium Nyíregyháza, Árok u. 53. TANMENET. Informatika szakmacsoport

Bevezetés a Python programozási nyelvbe

Programozás módszertan p.1/46

Objektumorientált paradigma és a programfejlesztés

1. Bevezetés A C++ nem objektumorientált újdonságai 3

Programozás C és C++ -ban

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Interfészek. PPT 2007/2008 tavasz.

500. AA Megoldó Alfréd AA 500.

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Objektum orientált kiterjesztés A+ programozási nyelvhez

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Alkalmazott modul: Programozás 6. előadás. Strukturált programozás: újrafelhasználható adattípusok

PROGRAMOZÁSI NYELVEK - CPP. ELŐADÁS JEGYZET

OOP. Alapelvek Elek Tibor

1. Alapok. Programozás II

Programozás I. 5. Előadás: Függvények

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Programozás C++ -ban

Programozás alapjai II. (3. ea) C++ Programfejlesztés. Néhány programozási módszer. Feladatanalízis. Modellezés Tervezés. Implementáció (programozás)

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Bevezetés a programozásba 2

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Programozás C++ -ban

Átírás:

Bevezetés a programozásba II 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

vektor.h #ifndef VEKTOR_H #define VEKTOR_H class Vektor { int meret, *mut; public: Vektor(int meret); int szamlal(int mit); }; #endif main.cpp Emlékeztető #include "vektor.h".. vektor.cpp #include "vektor.h" Vektor v(5); v.szamlal(0); int Vektor::szamlal(int mit) { int c=0; for (int i=0;i<meret;i++) if(mut[i]==mit) c++; return c; }

vektor.h #ifndef VEKTOR_H #define VEKTOR_H Emlékeztető Típus : class Vektor { Osztály int meret, *mut; { public: Vektor(int meret); int szamlal(int mit); }; #endif } main.cpp #include "vektor.h".. vektor.cpp #include "vektor.h" Változó : Vektor v(5); Objektum v.szamlal(0); int Vektor::szamlal(int mit) int c=0; for (int i=0;i<meret;i++) if(mut[i]==mit) c++; return c;

Osztályok Osztálynak nevezzük azokat a típusokat, amik összetett típusok, mezői vannak metódusok kapcsolódnak hozzá adat elrejtés, egyéb biztonsági garanciák (öröklődés) Adat absztrakció Ma legdivatosabb programozási módszertan

Objektumok Egy objektum: egy osztály egy példánya, azaz deklarált változó Van címe, memóriát foglal A struct fogalma kibővült metódusokkal Saját mezők, saját metódusok, this Modularitás

Egy példa Feladat: Űrhajós lövöldözős játék Eljárásközpontú megoldás: függvények rajzoláshoz függvények a szereplők mozgatásához függvények billentyűzet kezeléséhez függvények hálózat kezeléséhez egy nagy main függvény, ami a játékszabályok ismeretében a fentieket hívogatja Az adatok?

Egy példa Feladat: Űrhajós lövöldözős játék Moduláris megoldás: Szereplők adatai osztályokban (űrhajó, billentyű) Szereplők viselkedése metódusokban (rajzolás, mozgás) Az egymásra hatás szabályait a metódusok tartalmazzák (lokálisak) A main függvény csak létrehozza a játékmotort

Szemléletbeli különbségek Az eljárásközpontú programozás jelszava: keress jó algoritmust! A moduláris programozás jelszava: ráérsz jó algoritmust keresni, előbb rendezd az adataidat! Mindkét szemléletnek van létjogosultsága A különbségek többszemélyes, sokverziós programozásnál jönnek elő Új szempontok

Új szempontok Eddig mivel foglalkoztunk: algoritmus futásidő és memóriaigény biztonságos kód Újrafelhasználhatóság Karbantarthatóság Fejlesztési idő és költség Programtervezés folyamata, becslések

Karbantarthatóság A feladat kis változása kis programbéli változást okozzon Egy adat vagy funkció csak egy helyen szerepeljen Átlátható, olvasható kód elnevezési konvenciók tabulálás Gyorsan kereshető, moduláris kód Hibajelenség hiba helye a kódban, logikus felépítés

Fejlesztési idő és költség 1 programozó 10 nap alatt megoldja a feladatot Több programozó? Első lépés: n programozó kevesebb mint n*10 nap alatt oldja meg a feladatot Második lépés: n programozó 10 nap alatt oldja meg a feladatot Harmadik lépés: n programozó 10/n nap alatt oldja meg a feladatot

Fejlesztési idő és költség Kommunikáció egyértelműsége és tömörsége Tervezés, absztrakció adatok csoportosítása Szeparálható kód, szeparálható felelősség modularitás egyenként könnyű feladatok Külön tesztelhetőség Könyvtári, szabványos eljárások használata

Osztályok tervezése Vezérlés Az osztály szerepe a rendszerben Szerződés modell Ki kit hív meg, dinamikus memóriakezelés Reprezentáció Egy lehetséges megvalósítása a típusnak Szükség és lehetőség mérlegelése, STL konténerek A választott reprezentáció meghatároz metódusokat Gyakori lekérdezésekhez mező

Összefoglalás adatok gyűjtése Osztályok szerepei reprezentáció választása Osztály metódusai, tagjai Igény felmérés tervezési hiba új verzió programhiba rendszerbe illesztés Tesztelés modulonként Megvalósítás

Osztályszintű műveletek Metódusok hívásához általában objektum kell mezők csak objektumban vannak Mi a helyzet, ha a mezőktől független a metódus működése? Osztályszintű függvény, objektum nélkül is hívható class S{ public: static void fv() { } }; int main() { S::fv(); }

A static használata static T v = kezdoertek; A v változó ennek a sornak az első kiértékelésekor deklarálódik, majd az értéke megmarad, a blokkon kívül is A kezdőértéket sem veszi fel újra később Alapértelmezésben 0 kezdőérték is garantált Jól használható függvényhívások számolására, függvényben "előző híváskor felvett érték" Globálisan nem illik, fordítási egységek közötti takarásra való

Statikus tag class S{ public: static int m; }; int S::m; int main() { S sa; S sb; cout << sb.m; sa.m=1; cout << sb.m; S::m=2; cout << S::m; cin.get(); } Statikus adat deklaráció 0 1 2 Ha a deklaráció hiányzik akkor a linker hibát ad Az m mező osztályszintű

Összefoglalás Statikus tagokat osztályokban, osztályszintű adatokhoz (pl. futásidőben változtatható alapértelmezett érték, darabszám) Statikus metódusokat osztályszintű, (nem statikus) mezőket nem érintő funkciókhoz Osztályszint objektumszint A láthatóság osztályszintű