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

Hasonló dokumentumok
Bevezetés a Python programozási nyelvbe

C++ programozási nyelv

Osztályok. 4. gyakorlat

Java és web programozás

OOP. Alapelvek Elek Tibor

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

Programozási nyelvek Java

Alprogramok, paraméterátadás

Java és web programozás

Objektumok inicializálása

Pénzügyi algoritmusok

ELTE SAP Excellence Center Oktatóanyag 1

C++ programozási nyelv Konstruktorok-destruktorok

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

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

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

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

Programozási alapismeretek 4.

Programozás C++ -ban 2007/7

Osztály és objektum fogalma

OOP #14 (referencia-elv)

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

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.

és az instanceof operátor

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

Programozási nyelvek Java

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

Programozás módszertan

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

Java II. I A Java programozási nyelv alapelemei

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

Java és web programozás

Programozási nyelvek Java

Java II. I A Java programozási nyelv alapelemei

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

Programozás. Bevezetés. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

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

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

Objektumorientált programozás C# nyelven

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

C++ programozási nyelv

3. Osztályok II. Programozás II

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

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

III. OOP (objektumok, osztályok)

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

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

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

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?

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

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

A C programozási nyelv III. Pointerek és tömbök.

BME MOGI Gépészeti informatika 8.

Szoftvertechnológia alapjai Java előadások

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

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

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

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

Globális operátor overloading

A C programozási nyelv III. Pointerek és tömbök.

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

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

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

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

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

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

Rekurzió. Dr. Iványi Péter

Komplex függvények színes ábrázolása

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

Öröklés és Polimorfizmus

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

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

Programozás C++ -ban

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

Bevezetés a C++ programozási nyelvbe

A programozás alapjai 1 Rekurzió

500. AA Megoldó Alfréd AA 500.

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

1. Alapok. Programozás II

Abstract osztályok és interface-ek. 7-dik gyakorlat

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

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

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

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

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

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

Programozás alapjai II. (4. ea) C++

Programozási nyelvek II. JAVA

C++ programozási nyelv Konstruktorok Gyakorlat

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

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

Programozás II gyakorlat. 6. Polimorfizmus

- 1 - Konstansok használata. Döntsük el, van-e fordítási idejű hiba az alábbi programrészletekben! a) const char * str="zh"; str[0]++;

5. Gyakorlat. struct diak {

Informatika terméktervezőknek

Átírás:

Szegedi Tudományegyetem Informatikai Tanszékcsoport Objektum orientált kiterjesztés A+ programozási nyelvhez Diplomamunka terve Készítette: Bátori Csaba programtervező matematikus hallgató Témavezető: Dr. Kiss Ákos egyetemi adjunktus Szeged 2010. november 16.

1. fejezet Motiváció SZTE TTIK Informatikai Tanszékcsoport Szoftverfejlesztés tanszéken egy fordítóprogramot készítünk A+ programozás nyelvhez. A+ egy tömb orientál programozási nyelv, amely igen gazdag függvény és operátor készlettel rendelkezik. Elsődlegesen gazdasági jellegű programok készítésére használják, számos kritikus alkalmazás készült A+-ban. A fordítóprogram Dynamic Language Runtime fölé készül. DLR a Microsoft által készített.net keretrendszer része, amely további szolgáltatásokat add a Commom Language Runtime-hoz. A DLR fejlesztésének célja, hogy segítségével könnyen készíthessünk dinamikus programozási nyelveket.net futtatókörnyezethez. Több nyelvet megvalósítottak már DLR-ben, mint például IronRuby, IronPython. A.NET keretrendszer egy nagy osztálykönyvtárral rendelkezik. Jelenlegi diplomadolgozat célja az lenne, hogy az A+ programozási nyelvet olyan objektum orientált képességekkel ruházzuk fel, amelyek segítségével képes lenne ezt az osztálykönyvtárat felhasználni. 2

2. fejezet Objektum orientált kiterjesztés A formális definíció helyett egy példán keresztül mutatjuk be a kiterjesztést. A bemutatás a komplex számokat reprezentáló osztály segítségével történik, amelyet C#-ban készítünk el. Objektumok kezelését A+-ban egy függvény segítségével oldjuk meg. A kiterjesztés alapját a Pick nem skaláris függvény adja, aminek egyik esete az amikor egy slotfiller-ből elemeket veszünk ki. A mi objektum orientált függvényük is ezt az elvet próbálja követni, hogy adott nekünk egy objektumunk, és abból vegyünk ki elemeket. Ennek a pontos leírását az egyes alfejezetekben részletezzük. 2.1. Tagváltozók elérése/módosítása A komplex számok ábrázolása egy valós és egy képzetes egység segítségévek történik. Ezért vegyünk is fel a Complex osztályunkba két publikus tagváltozót, ezek reprezentálásra: public double real; public double imaginary; Jelen esetben a két tagváltozó, azért publikus, hogy közvetlenül is el tudjuk érni őket. 3

Jelöljük az általunk újonnan bevezetett objektum orientált A+ függvényünket: -val. Továbbá tegyük fel, hogy A+-ban már rendelkezünk egy Complex osztály példánnyal, és most jelölje c változó ezt a példányt. Akkor ha le szeretnénk kérdezni a c komplex szám valós részét, akkor ezt a következőképpen tehetjük meg: `real c Ebben az esetben ha a függvény jobb oldalára egy objektumot, a bal oldalára pedig egy szimbolikus konstanst írunk, amelyik reprezentál egy tagváltozót, akkor a függvény hívás eredménye a tagváltozónak az értéke. A+-osan fogalmazva, úgy is mondhatjuk, hogy kipickeljük az adott tagváltozót az adott objektumból. Amennyiben például új értéket szeretnénk beállítani a képzetes egységnek, akkor ezt a következőképpen tehetjük meg: (`imaginary c):= 5 Most, hogy már tudunk tagváltozókat kezelni, térjünk rá a metódusok kezelésére. 2.2. Metódusok meghívása Először is bővítsük a Complex osztályunkat egy olyan metódussal, amelyik képes két komplex számot összeadni: public Complex Add(Complex complex) return new Complex (this.real + complex.real, this.imaginary + complex.imaginary); Továbbá tegyük fel, hogy van még egy komplex objektumunk, amelyet jelöljünk d-vel. 4

Akkor az Add metódust a következő két lépés során tudjuk meghívni: f:= `Add c A fenti függvényhívás eredménye egy speciális függvény lesz, ugyanis ez a függvény magába foglalja azt az információt, hogy melyik objektumnak melyik metódusát kell meghívni. Jelen esetben ez a függvény hozzá lesz kötve a c objektumpéldány Add metódusához. Tehát ha meg szeretnénk hívni egy objektumnak egy metódusát, akkor az objektum orientált függvényünk jobb oldalára egy objektumot, a bal oldalára pedig egy szimbolikus konstanst kell írni, amely reprezentálja a metódus nevét. Ezután nincs más dolgunk csak meghívni az újonnan konstruált függvényünket, amely eredményül visszaad egy új komplex számot: fd 2.3. Statikus tagváltozók kezelése Statikus változók értékeinek lekérdezése/beállítása az osztály nevének segítségével lehetséges. Bővítsük a Complex osztályunkat egy statikus változóval: public readonly static Complex ADDITIVE_IDENTITY = new Complex(0,0); Ebben az esetben a fenti publikus statikus tagváltozónk csak olvasható, és az összeadás műveletének neutrális eleme. Mivel nincs szükségünk objektumra, hogy elérjük a neutrális elemet, így az objektum orientált függvényünk jobb oldalára egy szimbolikus konstansot írunk, amely reprezentálja az osztály nevét: `ADDITIVE_IDENTITY `Complex Vizsgáljuk meg a következő alfejezetben a statikus metódusok kezelését. 5

2.4. Statikus metódusok meghívása Adjunk egy statikus metódust a Complex osztályunkhoz: public static Complex Parse(List<char> complex) //Új komplex szám készítése complex char listából. Hasonlóan a nem statikus metódusok meghívásához, először konstruálunk egy függvényt, amely magában hordozza azt az információt, hogy melyik osztálynak melyik statikus metódusát hívjuk meg. Ezután alkalmazzuk az eredményül kapott függvényt. A két lépés egy kifejezéssé összevonva a következőképpen néz ki: (`Parse `Complex) 4 + 22i Jelen esetben a Complex osztálynak a Parse metódusát szeretnénk meghívni.tehát ahogy a fenti zárójeles függvényhívás mutatja, az objektum orientált függvényünk jobb és bal oldalára egy szimbolikus konstanst írunk. A jobb oldali az osztály nevét, míg a baloldali a metódus nevét reprezentálja. Az objektum orientált függvény által konstruált függvény pedig létrehoz egy új komplex számot. Eddigiek során feltettük, hogy már rendelkezünk objektumokkal, a következő alfejezetben arról beszélünk, hogyan lehetne objektumokat létrehozni A+-ban. 2.5. Objektumok létrehozása Az objektum orientált függvény monadikus alakja felelős az objektumok konstruálásért. Az eddigi elveket követve először létrehozunk egy olyan függvényt, amely tudja, hogy melyik osztályból szeretnénk példányosítani, majd meghívjuk a megfelelő paraméterekkel. A két lépés egy kifejezésként leírva: ( `Complex)3;5 6

Az objektum orientált függvényünk egy szimbolikus konstanst kap paraméterül, amely reprezentál egy osztály nevet. Jelenleg a Complex osztály nevét. A monadikus függvény eredménye egy konstruktor függvény lesz, amely meghívása után eredményül visszaad egy új komplex számot. 7