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

Hasonló dokumentumok
Programozási Nyelvek Gyakorlati jegyzet

Smalltalk 2. Készítette: Szabó Éva

Bevezetés a Python programozási nyelvbe

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

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

Osztályok. 4. gyakorlat

JAVA PROGRAMOZÁS 2.ELŐADÁS

III. OOP (objektumok, osztályok)

és az instanceof operátor

C++ programozási nyelv Konstruktorok-destruktorok

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

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

Globális operátor overloading

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

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?

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

Web-technológia PHP-vel

MAGAS SZINTŐ PROGRAMOZÁSI NYELVEK 2

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

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

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

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

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

Apple Swift kurzus 3. gyakorlat

Java és web programozás

JAVA PROGRAMOZÁS 3.ELŐADÁS

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

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

Programozás I. Első ZH segédlet

Objektumorientált programozás C# nyelven

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.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

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

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

OOP #14 (referencia-elv)

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

Objective-C PPKE-ITK

Programozási nyelvek II.: JAVA

Szoftvertechnolo gia gyakorlat

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

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

Programozás módszertan

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

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

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?

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java Programozás 11. Ea: MVC modell

Programozás C++ -ban

Programozási nyelvek II.: JAVA

Java és web programozás

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

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

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

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

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

Programozás C++ -ban 2007/7

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

A JavaScript főbb tulajdonságai

BME MOGI Gépészeti informatika 7.

Programozási nyelvek II. JAVA

Pénzügyi algoritmusok

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

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

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Programozási nyelvek Java

OOP: Java 4.Gy: Java osztályok

Programozási nyelvek II.: JAVA

Java II. I A Java programozási nyelv alapelemei

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek (ADA)

Programozási nyelvek Java

Objektum-orientált programozás

RESIDENT EVIL CODENAME: NIK

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

Szoftvertechnológia alapjai Java előadások

OOP: Java 8.Gy: Gyakorlás

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

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozási nyelvek Java

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

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

WEB-PROGRAMOZÁS II. 1. Egészítse ki a következő PHP kódot a következők szerint: a,b,c,d: <?php. interface Kiir { public function kiir();

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

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

Osztály és objektum fogalma

Programozási nyelvek II.: JAVA, 3. gyakorlat

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Java Programozás 3. Ea: Java osztályok. OOP alapalapok

Java programozási nyelv 6. rész Java a gyakorlatban

Elemi Alkalmazások Fejlesztése II.

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Java és web programozás

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

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

Szkriptnyelvek. 1. UNIX shell

Programozási nyelvek II.: JAVA

Java II. I A Java programozási nyelv alapelemei

Programozás C és C++ -ban

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Átírás:

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

Metaosztály fogalma Mint korában említettük, a Smalltalkban mindent objektumnak tekintünk. Még az osztályok is objektumok. De ha az osztály objektum, akkor az is - mint minden más objektum valamilyen osztályhoz kell tartozzon. Másképp fogalmazva minden osztály (pontosan) egy másik osztály példánya. Ezen "másik" osztályt metaosztálynak hívjuk. Az Object osztály Az Object osztály minden osztály közös őse, tehát minden objektum az Object osztály egy példánya. Ezért minden, az Object osztálynak rendelkezésre álló művelettel minden más objektum is rendelkezik. Ezek közül néhány fontosabb: class (unáris üzenet): Visszatérési értékként megkapjuk, hogy a címzett objetum milyen osztályhoz tartozik. Pl: 'Hello' class String ismemberof (kulcsszavas üzenet): Visszatérési értéke egy logikai érték. Az üzenet argumentuma egy osztálynév. Ha a címzett objektum példánya ezen osztálynak, akkor "true" a visszatérési érték, egyébként "false". Pl: 'Hello' ismemberof: String true

A Smalltalk osztályhierarchiája (részlet)

Új osztály definiálása Ososztaly subclass: Nev [ peldanyadattag_1 peldanyadattag_n peldanyuzenet_1 [ uzenet_torzs peldanyuzenet_2 [ uzenet_torzs peldanyuzenet_n [ uzenet_torzs osztalyadattag_1 := ertek. osztalyadattag_2 := ertek. osztalyadattag_n := ertek. Object subclass: #Hello instancevariablenames: ' ' classvariablenames: ' ' pooldictionaries: ' ' category: nil --------------------------------- Object subclass: #Kor instancevariablenames: 'koord_x koord_y sugar' classvariablenames: 'KorokSzama' pooldictionaries: ' ' category: nil

Mit jelent a példány- és osztályváltozó? Tekintsünk úgy egy osztályra, mintha egy C-beli struct lenne. Ha C- ben létrehozunk egy struct-típusú változót, akkor a struktúra adattagjaival minden ebből a típusból deklarált változó rendelkezik. Ilyen adattagoknak képzeljük el az osztályon belüli példányváltozót. Objektumorientáltan fogalmazva: minden, egy adott osztályból példányosított objektum rendelkezik az osztály összes példányváltozójával. Természetesen ezek példányonként más és más értékeket vehetnek fel. Az osztályváltozó inkább egy C-beli static kulcsszóval ellátott globális változóhoz hasonlítható. Egy osztályból példányosított objektumok hozzáférnek az osztály osztályváltozóihoz, de egyik példány sem rendelkezik ilyen adattaggal (példányváltozóval).

Üzenet definiálása osztályhoz Osztály definiálásakor Ososztaly subclass: Nev [ "unáris" nev [ utasitasok "bináris - op lehet pl. +, -, *, stb." op param [ utasitasok "kulcsszavas" kulcsszo_1: param_1 kulcsszo_2: param_2 kulcsszo_n: param_n [ utasitasok

Utólag: (beépített osztályokra is működik) Osztaly extend [ "ugyanúgy, mint az 1. esetnél; lehet unáris, bináris és kulcsszavas is" uzenet_1 [ utasitasok uzenet_2 [ utasitasok

Osztályüzenetek létrehozása: (csak utólag lehetséges) Osztaly class extend [ uzenet_1 [ utasitasok <osztálynév> <class> methodsfor: 'megjegyzés' <metódus neve> <utasítás_1, utasítás_2, utasítás_n> pl.: uzenet_2 [ utasitasok Kor methodsfor: 'Inicializálás' init koord_x := 0. koord_y := 0. sugar := 0.

Konstruktor Osztaly class extend [ "osztályüzenetet kell csinálni" "paraméter nélküli konstruktor" new [ "akármi lehet a neve, de a beépített osztályoknál mindig new, célszerű ezt követni" a a := super new. a init. "természetesen paraméteres initet is lehetne hívni" ^a. "paraméteres konstruktor" new: a new: b new: n [ a a := super new. a init: a init: b init: n. ^a. Kor class methodsfor: 'Létrehozás. A konstruktor szerepét tölti be.' new a a:= super new. a init. ^a a class kulcsszó azért kell, mert az üzenetet nem a Kor objektumnak, hanem a Kor osztálynak küldjük közvetlenül A super a szülőosztálynak küldi az üzenetet

"Létre kell hozni továbbá az inicializáló üzeneteket példányüzenetként:" Osztaly extend [ "paraméter nélküli init" init [ peldanyadattag_1 := nil. peldanyadattag_2 := nil. peldanyadattag_n := nil. ^self. "visszaadja önmagát" "paraméteres init" init: a init: b init: n [ peldanyadattag_1 := a. peldanyadattag_2 := b. peldanyadattag_n := n. ^self. "visszaadja önmagát"

A super és a self A super kulcsszó a Parent::, a self pedig a this, C++-ból ismert kulcsszavak megfelelői. Tehát egy metódusban levő self mindig arra az objektumra hivatkozik, melyre azt meghívtuk, a super pedig a szülőosztályra.

Feladatok: 1. Adjunk az Integer osztályhoz egy summto: üzenetet, amelynek eredménye A summto: B esetén a számok összege A-tól B-ig. 2. Írjunk egy Tört osztályt, és valósítsuk meg a négy alapműveletet Ehhez definiáljuk a következő üzeneteket: szamlalo: visszaadja a tört számlálójá, nevezo: visszaadja a tört nevezőjét, egyszerusit: egyszerűsíti a törtet, printnl: kiírja a törtet számláló/nevező formájában, + összeadő bináris operátor, - kivonó bináris operátor, * szorzó bináris operátor, / osztó bináris operátor.

9. Adjunk az Integer osztályhoz egy summto: üzenetet, amelynek eredménye A summto: B esetén a számok összege A-tól B-ig. Integer extend [ summto: B [ self < B iftrue: [ sum sum:=0. self to: B do: [:i i printnl.. ^sum. iffalse: [ 'A megadott ertek kisebb' printnl. ^self.. Integer methodsfor: 'summto muvelet' summto: B self < B iftrue: [ self to: B do: [:i i printnl. iffalse: ['A megadott ertek kisebb' printnl. 5 summto: 4. 4 summto: 13. 5 summto: 4. 4 summto: 13.

10. Írjunk tört osztályt, és valósítsuk meg a négy alapműveletet Ehhez definiáljuk a következő üzeneteket: szamlalo: visszaadja a tört számlálójá, nevezo: visszaadja a tört nevezőjét, egyszerusit: egyszerűsíti a törtet, printnl: kiírja a törtet számláló/nevező formájában, + összeadő bináris operátor, - kivonó bináris operátor, * szorzó bináris operátor, / osztó bináris operátor.

Object subclass: Tort [ szamlalo nevezo init: sz init: n [ szamlalo := sz. nevezo := n. self egyszerusit. ^self. szamlalo [ ^szamlalo. nevezo [ ^nevezo. egyszerusit [ lnko lnko := szamlalo gcd: nevezo. szamlalo := szamlalo // lnko. nevezo := nevezo // lnko. Number subclass: #Tort instancevariablenames: 'szamlalo nevezo' classvariablenames: '' pooldictionaries: '' category: nil Tort class methodsfor: 'konstruktor' new: szamlalo new: nevezo a a := super new. a init: szamlalo init: nevezo. ^a Tort methodsfor: 'egyeb uzenetek' init: a init: b szamlalo := a. nevezo := b. szamlalo ^szamlalo nevezo ^nevezo egyszerusit lnko lnko := szamlalo gcd: nevezo. szamlalo := szamlalo // lnko. nevezo := nevezo // lnko.

printnl [ szamlalo display. $/ display. nevezo displaynl. + masik [ er sz n sz := (szamlalo * masik nevezo) + (nevezo * masik szamlalo). n := nevezo * masik nevezo. er := Tort new: sz new: n. er egyszerusit. ^er. - masik [ er sz n sz := (szamlalo * masik nevezo) - (nevezo * masik szamlalo). n := nevezo * masik nevezo. er := Tort new: sz new: n. er egyszerusit. ^er. printnl szamlalo display. $/ display. nevezo display. Character nl display. + masik er sz n sz := (szamlalo * masik nevezo) + (nevezo * masik szamlalo). n := nevezo * masik nevezo. er := Tort new: sz new: n. er egyszerusit. ^er - masik er sz n sz := (szamlalo * masik nevezo) - (nevezo * masik szamlalo). n := nevezo * masik nevezo. er := Tort new: sz new: n. er egyszerusit. ^er

* masik [ er sz n sz := szamlalo * masik szamlalo. n := nevezo * masik nevezo. er := Tort new: sz new: n. er egyszerusit. ^er. / masik [ er sz n sz := szamlalo * masik nevezo. n := nevezo * masik szamlalo. er := Tort new: sz new: n. er egyszerusit. ^er. * masik er sz n sz := szamlalo * masik szamlalo. n := nevezo * masik nevezo. er := Tort new: sz new: n. er egyszerusit. ^er / masik er sz n sz := szamlalo * masik nevezo. n := nevezo * masik szamlalo. er := Tort new: sz new: n. er egyszerusit. ^er

Tort class extend [ new: sz new: n [ obj obj := super new. obj init: sz init: n. ^obj. Smalltalk at: #r1 put: (Tort new: 2 new: 3). Smalltalk at: #r2 put: (Tort new: 3 new: 4). (r1+r2) printnl (r1-r2) printnl (r1*r2) printnl (r1/r2) printnl r1 r2 r1 := Tort new: 2 new: 3. r2 := Tort new: 3 new: 4. (r1 + r2) printnl. (r1 - r2) printnl. (r1 * r2) printnl. (r1 / r2) printnl.