Objektumorientált programozás C# nyelven III.



Hasonló dokumentumok
Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven III.

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Bánsághi Anna

Objektumorientált programozás C# nyelven

Access adatbázis elérése OLE DB-n keresztül

C# osztályok. Krizsán Zoltán

Magas szintű programozási nyelvek 2 Előadás jegyzet

C# gyorstalpaló. Készítette: Major Péter

Informatika terméktervezőknek

117. AA Megoldó Alfréd AA 117.

Programozás II. labor

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Bevezetés a C++ programozási nyelvbe

INFORMATIKAI ALAPISMERETEK

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

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

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

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Tartalomjegyzék. Bevezetés...2

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

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?

INFORMATIKAI ALAPISMERETEK

Objektumorientált programozás C# nyelven II.

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

C# feladatok gyűjteménye

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

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

Szoftvertechnológia alapjai Java előadások

Programozási nyelvek Java

Objektumorientált programozás C# nyelven II.

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

Adatstruktúrák, algoritmusok, objektumok

3. Gyakorlat Ismerkedés a Java nyelvvel

Objektumorientált programozás C# nyelven

szolgáltatásról

Java II. I A Java programozási nyelv alapelemei

Géptermi zh-írás forgatókönyve

e-szignó Online Szolgáltatások

Programozás C++ -ban 2007/4

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

Kalapácsvetés 2016 szöveges

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

C#, OOP. Osztályok tervezése C#-ban

Bánsághi Anna

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

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Segédanyag: Java alkalmazások gyakorlat

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

A C# programozási nyelv alapjai

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

7. K: JAVA alapok Konzultáció

PHP5 Új generáció (2. rész)

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

2.3. A C nyelv utasításai

Programozás II. ATM példa Dr. Iványi Péter

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

Származtatási mechanizmus a C++ nyelvben

Java és web programozás

Java programozási nyelv

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

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

Programozás I. Első ZH segédlet

Kati Fotó Fuji Labor internetes ügyfélprogram Verziószám: Felhasználói útmutató

Algoritmusok és adatszerkezetek II.

BME MOGI Gépészeti informatika 8.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

BME MOGI Gépészeti informatika 4.

Java Programozás 1. Gy: Java alapok. Ismétlés ++

Java programozási nyelv 10. rész Input/output kezelés

Java IX. telkezelés a Java-ban

Bevezetés a C++ programozásba

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

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

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Java IX. telkezelés a Java-ban

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

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

Szoftvertervezés és -fejlesztés I.

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Objektumorientált programozás C# nyelven

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

A Vizsgálóhelyi nyilvántartó program Offline Telepítıje

Szoftvertechnológia alapjai Java előadások

Fizika InfoRmatika Kémia Alapok. Az Erdélyi Magyar Műszaki Tudományos Társaság kiadványa. Megjelenik kéthavonta (tanévenként 6 szám)

Internet programozása. 3. előadás

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

C++ programozási nyelv

OOP #14 (referencia-elv)

ÓRAREND SZERKESZTÉS. Felhasználói dokumentáció verzió 2.5. Budapest, 2011.

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

A Jáva programozási nyelv rejtelmei

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Átírás:

Objektumorientált programozás C# nyelven III. Kivételkezelés Tulajdonságok Feladatok Készítette: Miklós Árpád Dr. Kotsis Domokos

Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendı anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelezı irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges. 2009.06.17. 2

Kivételkezelés (1) A kivételek egyrészt nem várt, rendkívüli események, másrészt a kezelésükre szolgáló speciális osztályok Segítségükkel a hibakezelés elkülöníthetı a program logikájától és egységes, strukturált módon kezelhetık a felmerülı események A kivételkezeléssel ellátott programrészt háromféle típusú blokkra osztjuk fel: A try kulcsszóval jelölt blokk tartalmazza a normál programot A catch kulcsszóval jelölt blokkok a kivételkezelı kódot tartalmazzák Egy try blokkhoz egynél több catch blokk is megadható az egyes kivételtípusok különálló kezelésére (az ún. univerzális catch blokk viszont minden kivételt kezel) Használata nem kötelezı A finally kulcsszóval jelölt blokkok olyan kódot tartalmaznak, amelynek mindenképpen le kell futnia, attól függetlenül, hogy a normál programrészben történt-e rendkívüli esemény vagy sem Használata nem kötelezı Hiba esetén a throw kulcsszóval hozhatunk létre kivételt 2009.06.17. 3

A kivételkezelés menete: Kivételkezelés (2) Egy try blokkon belül hiba következik be, melynek hatására létrejön a megfelelı kivételosztály egy példánya A program nem hajtja végre a try blokk hátralévı utasításait, hanem megkeresi az elsı olyan catch blokkot, amely képes kezelni a bekövetkezett kivétel típusát Ha nem talál ilyet az adott metódusban, akkor elıször végrehajtja a try blokkhoz tartozó finally blokk utasításait, majd folytatja a keresést a metódust eredetileg hívó metódusban, és így tovább Ha megtalálta a megfelelı catch blokkot, akkor végrehajtja Ha a programban sehol sem talál megfelelı catch blokkot, akkor a program leáll A futtatókörnyezet minden programot egy univerzális catch blokkal ellátott try blokkban hajt végre, így akkor is lekezeli a bekövetkezı kivételt, ha a program nem (de a program így sem folytatódhat) A megfelelı catch blokk végrehajtása után folytatódik a végrehajtás Ha létezik a megtalált catch blokkhoz tartozó finally blokk, akkor ennek az elején Ha nem létezik, akkor a megtalált catch blokkhoz tartozó try blokk vége után Destruktor végrehajtása közben keletkezı kezeletlen kivételek Ha az ısosztálynak van destruktora, akkor meghívódik; ha nincs, akkor a kivétel nyom nélkül megszőnik 2009.06.17. 4

Kivételkezelés (3) A futtatókörnyezet sok kivételosztályt elıre definiál Ezekbıl származtathatunk saját kivételeket Származtatáshoz az ajánlott ısosztály a System.ApplicationException Object Exception SystemException ApplicationException ArgumentException IOException ArgumentNullException ArithmeticException ArgumentOutOfRangeException FileNotFoundException DirectoryNotFoundException StackOverflowException OutOfMemoryException DivideByZeroException OverflowException FileLoadException 2009.06.17. 5

Kivételkezelés (példa) class Matek { public static string Maradékképzés(int x, int y) { try { int z = x % y; return z.tostring(); catch (System.DivideByZeroException e) { return e.targetsite + " Nullával sajnos nem lehet osztani."; catch (System.Exception e) { return e.source + " Ismeretlen hiba történt.";... finally { Itt olyan kódot helyezhetnénk el, amelynek még hiba esetén is mindenképpen le kell futnia 2009.06.17. 6

... Kivételkezelés (példa) class Kivételkezelı { public static void Main() { System.Console.WriteLine(Matek.Maradékképzés(5, 1)); System.Console.ReadLine(); System.Console.WriteLine(Matek.Maradékképzés(9, 0)); 2009.06.17. 7

Kivételkezelés I. Módosítsuk az 5. témakörben készített számológép -e Main metódusát úgy, hogy a program csak szám értékő operandust fogadjon el. Hiba esetén kérjen be másik operandust. 2009.06.17. 8

A Main módosítása I... elso:system.console.write("elsı operandus: "); try {x=float.parse(system.console.readline()); catch (System.Exception) {System.Console.WriteLine("Hibás operandus!"); goto elso;.. Értelemszerően a másik operandus bekérése hasonlóan történhet. 2009.06.17. 9

A Main módosítása II. bool ujra=true;... while (ujra) {System.Console.Write("Elsı operandus: "); try {x=float.parse(system.console.readline()); ujra=false; catch (System.Exception) {System.Console.WriteLine("Hibás operandus"); ujra=true;... 2009.06.17. 10

Kivételkezelés II. Módosítsuk a programot úgy, hogy a Kalk metódus észlelje a nem megfelelı mőveleti kódot, ilyenkor adjon hibajelzést, és a Main metódus se írjon ki eredményt. 2009.06.17. 11

A Számoló, Számolgató módosítása public bool hiba;... protected virtual float Kalk() {try{ switch (mővelet) {... break; default: throw new System.Exception(); catch(system.exception) {System.Console.WriteLine("Hibás kód!"); hiba =true; return eredmény; 2009.06.17. 12

A Számoló, Számolgató módosítása public bool hiba;... protected virtual float Kalk() switch (mővelet) {... break; default: hiba =true; return eredmény; 2009.06.17. 13

Ugyanez throw használatával public bool hiba;... protected virtual float Kalk() {try{ switch (mővelet) {... break; default: throw new System.Exception(); catch(system.exception) {System.Console.WriteLine("Hibás kód!"); hiba =true; return eredmény; 2009.06.17. 14

A Main módosítása float e;... Számolgató Kiszámol= new Számolgató(x,y,z); Kiszámol.hiba=false; e = Kiszámol.Kalkuláló(); if (Kiszámol.hiba) {System.Console.WriteLine("Nincs eredmény!"); else {System.Console.WriteLine(x+" "+z+" "+y+" = "+ e); System.Console.ReadLine();... 2009.06.17. 15

Kivételkezelés Ia. Módosítsuk a Main metódust úgy, hogy a program csak szám értékő operandust fogadjon el. Hiba esetén kérjen be másik operandust, de az ötödik alkalommal lépjen ki, és ekkor már egyéb adatot (mőveleti kód, másik operandus) se kérjen be. 2009.06.17. 16

Deklaráció... float e=0; bool ujra=true; char z='?'; int ismétlés=0;... 2009.06.17. 17

Az elsı operandus bekérése... while (ujra && ismétlés<5) {System.Console.Write("Elsı operandus: "); try {x=float.parse(system.console.readline()); ujra=false; ismétlés=0; catch (System.Exception) {System.Console.WriteLine("Hibás operandus"); ujra=true; ismétlés++;... 2009.06.17. 18

A mőveleti jel bekérése... if (ismétlés<5) {System.Console.Write("Mőveleti jel: "); z=char.parse(system.console.readline());... 2009.06.17. 19

A második operandus bekérése... ujra=true; if (ismétlés<5) ismétlés=0; while (ujra && ismétlés<5) {System.Console.Write("Második operandus: "); try {y=float.parse(system.console.readline()); ujra=false; catch (System.Exception) {System.Console.WriteLine("Hibás operandus"); ujra=true; ismétlés++;... 2009.06.17. 20

Az eredmény kiszámítása... Számolgató Kiszámol= new Számolgató(x,y,z); if (ismétlés<5) {Kiszámol.hiba=false; e = Kiszámol.Kalkuláló(); if (Kiszámol.hiba ismétlés>=5) {System.Console.WriteLine("Nincs eredmény!"); else {System.Console.WriteLine(x+" "+z+" "+y+" = "+ e);... 2009.06.17. 21

Tulajdonságok (1) A tulajdonságok olyan intelligens mezık, amelyek olvasását és írását a programozó által megadott ún. hozzáférési metódusok végzik Az osztályt felhasználó kód számára mezınek tőnnek Az osztály fejlesztıje számára metóduspárként jelennek meg A hozzáférési metódusok bármilyen mőveletet végrehajthatnak (pl. beírandó adat ellenırzése, kiolvasandó adat kiszámítása ) Nem célszerő hosszan tartó mőveletekkel lelassítani a tulajdonság elérését Kerülni kell a felhasználó kód számára váratlan mellékhatásokat 2009.06.17. 22

Tulajdonságok (2) Létrehozhatók csak olvasható vagy csak írható tulajdonságok is Ha nem adjuk meg az írási, illetve olvasási metódust, akkor csak olvasható, illetve csak írható tulajdonság jön létre Az olvasási és írási metódushoz hozzáférési szint adható meg Ezzel a módszerrel például létrehozhatók nyilvánosan olvasható, de csak a saját vagy a leszármazott osztályok által írható tulajdonságok Az olvasási metódust a get, az írási metódust a set kulcsszó segítségével kell megadnunk A hozzáférési metódusokat a tulajdonság definícióján belül kell megadnunk 2009.06.17. 23

using System; Tulajdonságok (példa) class Személy { private string vezetéknév = "<üres>"; private string keresztnév = "<üres>"; Gyakori megoldás, hogy a nyilvános tulajdonság neve nagybetős, a hozzá tartozó privát mezı neve pedig ugyanaz kisbetős változatban public string Vezetéknév { get { return vezetéknév; set { if (value!= "") vezetéknév = value; public string Keresztnév { get { return keresztnév; set { if (value!= "") keresztnév = value; public string Név { get { return vezetéknév + " "+ keresztnév; A tulajdonság értékét a return kulcsszóval adjuk vissza a hívónak Nem adtunk meg set metódust, így ez a tulajdonság csak olvasható A tulajdonság megadott új értékét mindig egy value nevő rejtett paraméter tartalmazza 2009.06.17. 24

Tulajdonságok (példa) class Személykezelı { static void Main() { Személy Pistike = new Személy(); Console.WriteLine("Üres nevem: " + Pistike.Név); Pistike.Keresztnév = "István"; Console.WriteLine("Félkész nevem: " + Pistike.Név); Pistike.Vezetéknév = "Kovács"; Pistike.Keresztnév = ""; Console.WriteLine("Nevem: " + Pistike.Név); Console.ReadLine(); 2009.06.17. 25

Feladat Módosítsa a számológép programot úgy, hogy a Számoló osztálybeli operandusok és a mőveleti kód tulajdonságok legyenek! 2009.06.17. 26

Számoló tulajdonsággal class Számolo { protected float op1, op2; protected char mővelet; protected float eredmény; public float Op1 { set { op1 = value; public float Op2 {set { op2 = value; public char Mővelet { set { mővelet = value; 2009.06.17. 27

Feladat Módosítsa a számológép programot úgy, hogy az operandusok szám mivoltának ellenırzése a megfelelı tulajdonsághoz tartozó set metódusban történjék! 2009.06.17. 28

Feladat Készítsen hallgatói nyilvántartást. A Hallgató osztályban legyenek tulajdonságok: Vnév, Knév, Szülidı, Szülhely. Valamennyi string lehet, de a Szülidı formája 4+2+2 számjegy, tetszıleges karakterrel elválasztva. Ellenırizze a megfelelı set metódusban! 2009.06.17. 29

Feladat II. Készítse el Kollégista osztályt, amely a Hallgató osztály örököse. További tulajdonság: Szobaszám. Ehhez készítsen saját kivétel osztályt Rosszoba néven! 2009.06.17. 30

Saját kivétel osztály class Rosszoba : ApplicationException { 2009.06.17. 31

Feladat III. Készítse el az Kiskolesz és a Nagykolesz osztályokat, amelyek a Kollégista osztály örökösei. Módosított tulajdonság: Szobaszám. Ez Kiskolesz nél 0-nál nagyobb és 100-nél kisebb szám, Nagykolesz -nél 0-nál nagyobb és 1000-nél kisebb szám lehet. Ellenırizze a megfelelı set metódusban! 2009.06.17. 32

Feladat IV. Készítse el a Kezelés osztályt, amelyben egy menü van három menüponttal: 1. Felvitel 2. Kiírás 3. Kilépés A felvitel elıtt kérdezze meg, melyik kollégiumhoz tartozik az illetı! A példányokat (max 25) egy tömbben tárolja! 2009.06.17. 33

Házi feladat 1 Készítsünk egy háttértároló osztályt, amely fájlok listáját kezeli az alábbi módon: -A háttértárolónak van egy maximális tárolókapacitása, melyet csak -konstruktorban lehet beállítani - Van egy Format() metódusa, mely üríti a fájlok listáját -Van egy MaximálisKapacitás tulajdonsága, amellyel le lehet kérdezni a maximális kapacitás értékét -Van egy SzabadKapacitás tulajdonsága, amellyel le lehet kérdezni a meghajtó szabad kapacitását -Van egy FoglaltKapacitás tulajdonsága, amellyel le lehet kérdezni a tárolt -fájlok összméretét -Van egy Hozzáad() metódusa, amellyel új fájlt lehet hozzáadni, ha ugyanilyen nevő fájl nincs még a háttértárolón, illetve az új fájl elfér a háttértárolón -Van egy Keres() metódusa, amely egy megadott fájlnév alapján megkeresi és visszaadja a fájlt -Van egy Töröl() metódusa, amely letörli a megadott fájlt, amennyiben létezik A fájlok jellemzıi a következık: - Van nevük és méretük - Van 2009.06.17. egy-egy CsakOlvasható, Rendszer és Rejtett attribútumuk 34

Házi feladat 2 Fejlesszük tovább az alap háttértároló osztályt Floppy osztállyá az alábbi módosítások szerint: - A floppy mérete 1440KB -A floppy-nak van írásvédı tolókája, amely ha írásvédett' állapotba kerül, akkor a floppyn sem a Format(), sem a Hozzáad(), sem a Törlés() nem mőködik Fejlesszük tovább az alap háttértároló osztályt DVD osztállyá az alábbi módosítások szerint: - A DVD mérete 4700MB -A DVD alapból még írható, törölhetı, de miután meghívjuk a Zárolás() metódusát (DVD felírása), akkor utána már nem használható rajta sem a Format(), sem a Hozzáad(), sem a Töröl() ( egyszer írható DVD ) - A zárolt DVD szabad kapacitása mindig 0 legyen Fejlesszük tovább a DVD osztályt DVD-RW osztállyá az alábbi módosítások szerint: -A DVD-RW többször is írható DVD, ezért van egy Megnyitás() metódusa is. -Ekkor a DVD lemez visszaáll egy üres alapállapotba. 2009.06.17. 35

Házi feladat 3 Fejlesszük tovább az alap Háttértároló osztályt HDD osztállyá a célnak megfelelı módosítások szerint. Fejlesszünk ki egy Számítógép osztályt az alábbiak szerint: -Több háttértárolója is lehet, melyek egy Felcsatol() metódus segítségével lehet csatolhatók a géphez -Van egy Összkapacitás tulajdonsága, amely megadja az összes háttértároló teljes kapacitásának összegét -Van egy SzabadKapacitás tulajdonsága, amely megadja az összes háttértároló teljes szabad kapacitásának összegét -Van egy FoglaltKapacitás tulajdonsága, amely megadja az összes háttértároló teljes foglalt kapacitásának összegét -Van egy Archivál() metódusa, mely a megadott fájlt megkeresi a háttértárolók valamelyikén, majd a megadott másik háttértárolóra a megfelelı módon archiválja a fájlt. Amennyiben nem adunk meg másik háttértárolót, a metódus keres egy másik használható háttértárolót és oda végzi el az archiválást. 2009.06.17. 36