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

Hasonló dokumentumok
Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

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

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

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

OOP #14 (referencia-elv)

Objektumelvű programozás

C++ programozási nyelv Konstruktorok-destruktorok

JAVA PROGRAMOZÁS 2.ELŐADÁS

Osztályok. 4. gyakorlat

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

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

A C# programozási nyelv alapjai

Informatika terméktervezőknek

és az instanceof operátor

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

BME MOGI Gépészeti informatika 6.

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

Objektumorientált paradigma és programfejlesztés Bevezető

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Programozási nyelvek Java

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

Objektumorientált paradigma és a programfejlesztés

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

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

OOP: Java 8.Gy: Abstract osztályok, interfészek

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

Objektumorientált Programozás VI.

BME MOGI Gépészeti informatika 7.

OOP. Alapelvek Elek Tibor

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Bánsághi Anna

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

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

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

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

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

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

Objektumorientált programozás C# nyelven

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Java és web programozás

Szoftvertechnolo gia gyakorlat

Objektumorientált programozás IX. Osztályok, objektumok

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

Már megismert fogalmak áttekintése

A C# PROGRAMOZÁSI NYELV

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások

C programozási nyelv Pointerek, tömbök, pointer aritmetika

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

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Apple Swift kurzus 3. gyakorlat

Java programozási nyelv 5. rész Osztályok III.

Java III. I I. Osztálydefiníció (Bevezetés)

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java III. I I. Osztálydefiníció (Bevezetés)

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Java II. I A Java programozási nyelv alapelemei

BME MOGI Gépészeti informatika 4.

Java II. I A Java programozási nyelv alapelemei

Adatszerkezetek I. 1. előadás

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

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

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

Java programozási nyelv

GYAKORLATIAS JAVA MINTA

S0-02 Típusmodellek (Programozás elmélet)

Bevezetés a Python programozási nyelvbe

Osztály és objektum fogalma

Algoritmusok, adatszerkezetek, objektumok

.Net adatstruktúrák. Készítette: Major Péter

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?

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Generikus osztályok, gyűjtemények és algoritmusok

3. Osztályok II. Programozás II

Objektumorientált programozás C# nyelven

Programozási technológia

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

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

Interfészek. PPT 2007/2008 tavasz.

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Oktatási segédlet 2014

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

Programozási nyelvek Java

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

III. OOP (objektumok, osztályok)

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

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)

Bevezetés, a C++ osztályok. Pere László

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

Programozási nyelvek Java

Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás

Átírás:

IMPERATÍV PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 7. ELŐADÁS - ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 1 of 33

TEMATIKA I. ALAPFOGALMAK, TUDOMÁNYTÖRTÉNET II. IMPERATÍV PROGRAMOZÁS Imperatív paradigma Procedurális paradigma Generikus paradigma III. STRUKTÚRÁLT PROGRAMOZÁS Objektumorientált paradigma Moduláris paradigma 2014 Bánsághi Anna 2 of 33

III. OBJEKTUMORIENTÁLT PARADIGMA 1. Absztrakt adattípus Adatabsztrakció Konstruktorok Operátorok túlterhelése 2. Objektumok, osztályok 3. OOP tervezés 4. Öröklődés 5. Adatszerkezetek megvalósítása 2014 Bánsághi Anna 3 of 33

AZ ABSZTRAKCIÓ MÁSODIK SZINTJE a végrehajtás irányából utasításabsztrakció lényeges, hogy mit csinál az algoritmus lényegtelen, hogyan van implementálva az adatok irányából adatabsztrakció lényeges a való világ modellezése lényegtelen a reprezentáció, az implementáció objektumorientált paradigma absztrakt adattípusok 2014 Bánsághi Anna 4 of 33

1. ABSZTRAKT ADATTÍPUS 2014 Bánsághi Anna 5 of 33

ELEMI TÍPUSOK szerkezet nélküliek, logikailag felbonthatatlanok (int, char,...) ÖSSZETETT TÍPUSOK meglévő típusokból tevődnek össze típuskonstrukciók segítségével (rekord, tömb és unió) ABSZTRAKT ADATTÍPUSOK meglévő típusokból tevődnek össze típuskonstrukciókkal és új műveletek megvalósításával 2014 Bánsághi Anna 6 of 33

ABSZTRAKT ADATTÍPUS a típus definiálása két részből áll meg kell adni az értékhalmaz t, mely véges, mert a lefoglalható memória területe is véges meg kell adni a művelethalmaz t, az értékhalmazon értelmezett műveleteket, esetleg más értékhalmazokat is felhasználva int = ( Z, { + - * / ) bool = ( { true, false, { ) 2014 Bánsághi Anna 7 of 33

ŰRTELESZKÓP FELADAT Számoljuk meg, hány ismeretlen tárgy tartózkodik a Hubble űrteleszkóp 10 km-es környezetében VISSZAVEZETÉS VALAMELY ISMERT PROGRAMOZÁSI TÉTELRE azt sejtjük, hogy a Számlálás tétellel megoldható, hogyha az alábbi megfeleltetéseket alkalmazzuk: tulajdonság tömb[1..n] ~ ~ űrteleszkóp 10 km-es környezetébe esik ismeretlen tárgyak darab = 0 ciklus i = 1-től n-ig ha űrteleszkóp 10 km-es környezetébe esik( ismeretlen tárgyak[i] ) akkor darab += 1 elágazás vége ciklus vége 2014 Bánsághi Anna 8 of 33

PROBLÉMAFELVETÉS tovább már nem tudjuk finomítani a feladatot, hiszen egy programozási tételre vezettük vissza, amely nem bontható fel további részfeladatokra mégis baj van, mert nincsen olyan megvalósítása a Számlálás tételnek, amely ismeretlen tárgyak tömbjének elemeit vizsgálná aszerint, hogy azok beleesnek-e egy űrteleszkóp 10 km-es környezetébe induljunk el az adatok irányából 2014 Bánsághi Anna 9 of 33

A FELADAT ABSZTRAKCIÓJA űrteleszkóp 10 km-es környezete ismeretlen tárgy ~ ~ 10 km sugarú gömb térbeli pont Számoljuk meg, hány pont esik egy adott 10 km sugarú gömbbe AZ ALGORITMUS AKTUALIZÁLÁSA darab = 0 ciklus i = 1-től n-ig ha pontok[i] gömb akkor darab += 1 ciklus vége 2014 Bánsághi Anna 10 of 33

ABSZTRAKT TÍPUSOK Ha lennének Pont és Gömb típusaink, és a Gömb típuson lenne egy BennevanE egy pont a gömbben művelet, akkor kész lennénk Tegyük fel, hogy olyan programozási nyelvet használunk, amely biztosít nyelvi eszközt absztrakt adattípusok létrehozására, és fogjuk fel két kisebb programozási feladatként a Pont és a Gömb típusok létrehozását 2014 Bánsághi Anna 11 of 33

PONT TÍPUS SPECIFIKÁCIÓJA értékhalmaz térbeli pontok halmaza művelethalmaz - GÖMB TÍPUS SPECIFIKÁCIÓJA értékhalmaz gömbök halmaza művelethalmaz { BennevanE gondoljuk át, hogyan tudnánk elemi, összetett és absztrakt típusok segítségével megvalósítani a két típusspecifikációt 2014 Bánsághi Anna 12 of 33

PONT TÍPUS REPREZENTÁCIÓJA egy térbeli pont három koordinátával jellemezhető valamely 3 dimenziós koordinátarendszerben értékhalmaz művelethalmaz R R R = R 3 R 3, Pont = ( ) Pont p = ( p.x, p.y, p.z ) 2014 Bánsághi Anna 13 of 33

PONT TÍPUS MEGVALÓSÍTÁSA rekorddal, melynek három mezeje van struct Pont { // a pont rekordja // mezők: double x; // x koordináta double y; // y koordináta double z; // z koordináta public static void Main() { Pont pont; // pont típusú változó deklarálása // a pont mezőinek értékadása Console.Write( "x: " ); pont.x = double.parse( Console.ReadLine() ); Console.Write( "y: " ); pont.y = double.parse( Console.ReadLine() ); Console.Write( "z: " ); pont.z = double.parse( Console.ReadLine() ); Console.WriteLine( "A pont: ({0, {1, {2)", pont.x, pont.y, pont.z ); 2014 Bánsághi Anna 14 of 33

PONTOK DINAMIKUS LISTÁJA a listát dinamikusan hozzuk létre public static void Main() { var pontok = new List<Pont>(); // pontok listája konstruktorral létrehozva for( int i = 0; i < 3; ++i ) { // három elemű lista lesz Pont pont; // a ciklusra lokális változó Console.Write( "x: " ); pont.x = double.parse( Console.ReadLine() ); Console.Write( "y: " ); pont.y = double.parse( Console.ReadLine() ); Console.Write( "z: " ); pont.z = double.parse( Console.ReadLine() ); pontok.add( pont ); // a pont hozzáfűzése a listához foreach( Pont pont in pontok ) { Console.WriteLine( "A pont: ({0, {1, {2)", pont.x, pont.y, pont.z ); 2014 Bánsághi Anna 15 of 33

GÖMB TÍPUS REPREZENTÁCIÓJA egy gömb középpontjával és sugarával jellemezhető valamely 3 dimenziós koordinátarendszerben R értékhalmaz Pont művelethalmaz { BennevanE : Gömb Pont R Gömb = ( Pont, { BennevanE ) Gömb g = ( g.c, g.r ) L 2014 Bánsághi Anna 16 of 33

BENNEVAN-E EGY PONT EGY GÖMBBEN ezt a műveletet fogjuk fel egy újabb részfeladatként Számítsuk ki a gömb középpontjának és a pontnak a távolságát, és döntsük el, hogy ez a távolság kisebb-e, mint a gömb sugara A FELADAT ABSZTRAKCIÓJA Számítsuk ki két térbeli pont távolságát, és döntsük el, hogy ez a távolság kisebb-e, mint egy adott nemnegatív valós szám FINOMÍTOTT REPREZENTÁCIÓ BennevanE : R 3 R 3 R L 2014 Bánsághi Anna 17 of 33

AZ ABSZTRAKT FELADAT MEGOLDÁSA BennevanE : R 3 R 3 R L bemenet p, c : R 3 és r : R kimenet bennevan : L előfeltétel r 0 utófeltétel bennevan = SPECIFIKÁCIÓ (p. x c. x ) 2 + (p. y c. y ) 2 + (p. z c. z) 2 < r 2014 Bánsághi Anna 18 of 33

GÖMB TÍPUS MEGVALÓSÍTÁSA rekorddal, melynek két mezeje és egy metódusa van public struct Gomb { // mezők: public Pont c; public double r; // metódus: public bool BennevanE( Pont pont ) { double tavolsag = Math.Sqrt( Math.Pow(( pont.x - c.x ), 2 ) + Math.Pow(( pont.y - c.y ), 2 ) + Math.Pow(( pont.z - c.z ), 2 )); return tavolsag < r; 2014 Bánsághi Anna 19 of 33

Főprogram - gömb létrehozása public static void Main() { Gomb gomb; Pont kozeppont; kozeppont.x = 1; kozeppont.y = 4; kozeppont.z = 2; gomb.c = kozeppont; gomb.r = 12; Console.WriteLine( "Középpont: ({0, {1, {2)", gomb.c.x, gomb.c.y, gomb.c.z ); Console.WriteLine( "Sugár: {0", gomb.r ); 2014 Bánsághi Anna 20 of 33

Főprogram - pont létrehozása és vizsgálat Pont pont; Console.Write( "x: " ); pont.x = double.parse( Console.ReadLine() ); Console.Write( "y: " ); pont.y = double.parse( Console.ReadLine() ); Console.Write( "z: " ); pont.z = double.parse( Console.ReadLine() ); Console.WriteLine( "A pont: ({0, {1, {2)", pont.x, pont.y, pont.z ); Console.WriteLine( "A pont bennevan a gömbben: {0", gomb.bennevane( pont )); 2014 Bánsághi Anna 21 of 33

A Számlálás tételét most már alkalmazhatjuk pontokra és gömbökre is darab = 0 ciklus i = 1-től n-ig ha gömb.bennevane( pontok[i] ) akkor darab += 1 ciklus vége static int Szamlalas( List<Pont> pontok, Gomb gomb ) { int darab = 0; foreach( var pont in pontok ) { if( gomb.bennevane( pont )) { ++darab; return darab; 2014 Bánsághi Anna 22 of 33

2. KONSTRUKTOROK a rekordok mezőit egyesével inicializálni körülményes egyszerűsíthető, ha készítünk egy beállító metódust, amely a paraméterek alapján értéket ad a mezőknek nem kötelező az összes mezőt paraméteren keresztül beállítani, de mindegyiket inicializálni kell ezt a metódust is meg kell hívni egyszer van egy olyan speciális metódus, amely akkor hívódik meg, amikor létrehozunk egy változót a rekord típusból, ez a példány konstruktor 2014 Bánsághi Anna 23 of 33

PÉLDÁNY KONSTRUKTOR speciális metódus, melyet egy adott típusú érték (példány) létrehozására használunk hívásakor lefoglalódik a hely a memóriában a példány számára, és a mezők alapértelmezett értékeket kapnak a konstruktor neve megegyezik a típus nevével nincs visszatérési típusa, arra szolgál, hogy a rekord mezőit kezdőértékkel lássa el akkor is létezik egy paraméter nélküli változata, ha nem írjuk meg, nem végez inicializáló tevékenységet tetszőlegesen paraméterezhető és túlterhelhető (rekordok struct esetén nem definiálható felül a paraméter nélküli konstruktor) 2014 Bánsághi Anna 24 of 33

PONT TÍPUS KONSTRUKTOROKKAL R R R = R 3 értékhalmaz művelethalmaz { Pont : R Pont, Pont : R R Pont, Pont : Pont R R R Pont = ( R 3, { Pont ) 2014 Bánsághi Anna 25 of 33

BŐVÍTETT PONT TÍPUS public class Teglalap { // mezők: public double a; public double b; // konstruktorok: public Teglalap() { a = 10; b = 10; public Teglalap( double oldal1, double oldal2 ) { a = oldal1; b = oldal2; // metódusok: public double Kerulet() { return 2 * a + 2 * b; public double Terulet() { return a * b; 2014 Bánsághi Anna 26 of 33

GÖMB TÍPUS KONSTRUKTOROKKAL R R értékhalmaz Pont művelethalmaz { Gömb : Gömb, Gömb : Pont Gömb, Gömb : Pont Gömb, BennevanE : Gömb Pont R L Gömb = ( Pont R, { Gömb, BennevanE ) 2014 Bánsághi Anna 27 of 33

BŐVÍTETT GÖMB TÍPUS public struct Gomb { // mezők: public Pont c; public double r; // konstruktorok: public Gomb( Pont kozeppont ) { c = kozeppont; r = 10; public Gomb( double sugar ) { c = new Pont( 0, 0, 0 ); r = sugar; public Gomb( Pont kozeppont, double sugar ) { c = kozeppont; r = sugar; // metódus: public bool BennevanE( Pont pont ) {... 2014 Bánsághi Anna 28 of 33

PÉLDÁNYOSÍTÁS public static void Main() { // változó deklaráció, nem történik memóriafoglalás, "p0" még nem létezik, // nem lehet a pontra hivatkozni addig, amíg az összes mezeje értéket nem kap Pont p0; // objektum létrehozása az alapértelmezett konstruktorral, memóriafoglalással // "p1" létrejött, lehet a pontra és mezőire hivatkozni, bár a mezők a // fordítóprogram által adott értékekkkel lettek inicializálva var p1 = new Pont(); // objektum létrehozása a 2 paraméteres konstruktorral var p2 = new Pont( 3, 3 ); // objektum létrehozása a 3 paraméteres konstruktorral var p3 = new Pont( 1, 4, 2 ); // gömb létrehozása konstruktorral var gomb = new Gomb( 12 ); 2014 Bánsághi Anna 29 of 33

3. OPERÁTOROK TÚLTERHELÉSE lehetőségünk van arra, hogy a műveleteinket operátorokkal valósítsuk meg úgy használhatók, mint a beépített operátorok, de a működésüket mi határozzuk meg kötött a paraméterek száma éa a visszatérési érték megléte, de a típusok tetszőlegesek az unáris, a matematikai, a logikai és a relációs operátorok terhelhetők túl 2014 Bánsághi Anna 30 of 33

PONT TÍPUS == ÉS!= OPERÁTORAI R R R = R 3 értékhalmaz művelethalmaz { Pont : R Pont, Pont : R R Pont, Pont : R R R Pont, == : Pont Pont L,!= : Pont Pont L Pont = ( R 3, { Pont, ==,!= ) 2014 Bánsághi Anna 31 of 33

AZ OPERÁTOROK MEGVALÓSÍTÁSA public struct Pont { // mezők: public double x; public double y; public double z; // konstruktorok: public Pont( double p2 ) {... public Pont( double p1, double p2 ) {... public Pont( double p1, double p2, double p3 ) {... // operátorok: public static bool operator ==( Pont p1, Pont p2 ) { return ( p1.x == p2.x && p1.y == p2.y && p1.z == p2.z ); public static bool operator!=( Pont p1, Pont p2 ) { // itt már az imént definiált == operátort hívjuk meg a két ponton return! ( p1 == p2 ); 2014 Bánsághi Anna 32 of 33

FELADAT Ellenőrizzük, hogy ütközött-e valamely ismeretlen tárgy az űrteleszkóppal Használjuk az Eldöntés (létezik) programozási tételt public static void Main() {... bool utkozes = LetezikE( pontok, gomb );... static bool LetezikE( List<Pont> pontok, Gomb gomb ) { int i = 0; while( i < pontok.count && pontok[i]!= gomb.c ) { ++i; return ( i < pontok.count ); 2014 Bánsághi Anna 33 of 33