1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
C++ programozási nyelv Gyakorlat hét
Tömbök C#-ban.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
4. előadás (2005. március 8.) Pointerek Pointer aritmetika
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Mutatók, tömbök, függvények
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/15 C++ programozási nyelv Gyakorlat hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
C# Alapok Krizsán Zoltán.
C# tagfüggvények.
C# osztályok Krizsán Zoltán 1.0.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
P ROGRAMOZÁS I/O műveletek. S YSTEM.C ONSOLE A programjainknak fontos része a felhasználóval való kommunikáció. Adatokat kell kérni tőle, vagy közölnünk.
Tömbök Csernoch Mária.
Összetett adattípusok
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Tömbök
Java programozási nyelv Metódusok
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Informatikai gyakorlatok 11. évfolyam
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
A C++ programozási nyelv
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz

2 A pointer a memória egy címét tartalmazza. Ezen a memóricen egy ‘nagy’ méretű adathalmaz található (pl string, tömb, objektum sok mezővel, …). TKor k; null... k = new TKor(); cím TKor példány mezők...

3 Két pointer alapú változó közötti értékadás során csak a memóriacím másolódik át! TKor k = new TKor(); TKor p = k; TKor k = new TKor(); TKor p = k; cím TKor példány mezők cím...

4 TKor k = new TKor(); k.sugar = 10; TKor p = k; p.sugar = 20; Console.WriteLine( k.sugar ); TKor k = new TKor(); k.sugar = 10; TKor p = k; p.sugar = 20; Console.WriteLine( k.sugar ); TKor k = new TKor(); k.sugar = 10; Beallit( k ); Console.WriteLine( k.sugar ); TKor k = new TKor(); k.sugar = 10; Beallit( k ); Console.WriteLine( k.sugar ); void Beallit( Tkor x ) { x.sugar = 25; } void Beallit( Tkor x ) { x.sugar = 25; }

Minden osztály típusú változó mindig pointer típusú is egyben! A pointer-t a.NET környezetben referencia-nak nevezik. A referencia változó lényegében pointer változó. A referenciák által mutatott terület típusos, és a GC felügyeli ezeket a területeket. Van ilyen fogalom is a.NET-ben, hogy pointer, de az a hagyományos pointert jelenti (C, C++ fogalom), amely nem típusos, és az általuk mutatott területeket a GC nem felügyeli ( a programozónak kell felszabadítani explicit módon).

Minden példány változó 4 byte helyet foglal el. Alapértelmezett értéke a ‘null’, vagyis hogy nincs még hozzá tartozó tényleges példány-terület. Két ilyen példány-változó közötti értékadás során csak a címek másolódnak át (gyors). Fv-ek felé történő paraméterátadás során ez mindig cím szerinti paraméterátadást jelent! TKor k = new TKor();... k = null; TKor k = new TKor();... k = null; Már jöhet is a GC, és takaríthatja ki a lefoglalt TKor példányt…

7 int a = 10; int b = a; b = 12; Console.WriteLine( a ); int a = 10; int b = a; b = 12; Console.WriteLine( a ); Nem lenne jó, ha itt a 12 íródna ki! Az alap típusok (int, bool, char, double, … ) változók nem referencia elvűek. Ezeket value-type (érték- típusoknak nevezzük). int a = 10; int b = a; b = 12;

Az érték-típusú változókhoz tartozó memóriaterületen maga az érték tárolódik. A közöttük történő értékadás során az érték másolódik át egyik cellából a másikba. Az ilyen típusú fv-paraméterek alapból érték szerinti paraméterátadással működnek: int a = 10; Beallit( a ); Console.WriteLine( a ); // még mindig 10 int a = 10; Beallit( a ); Console.WriteLine( a ); // még mindig 10 void Beallit( int x ) { x = 25; } void Beallit( int x ) { x = 25; }

Az érték-típusú változók cím szerinti paraméterátadását a ‘ref’ kulcsszóval kell megjelölni: int a = 10; Beallit( ref a ); Console.WriteLine( a ); // most 25 int a = 10; Beallit( ref a ); Console.WriteLine( a ); // most 25 void Beallit( ref int x ) { x = 25; } void Beallit( ref int x ) { x = 25; }

Érték-típusú osztályt tudunk csinálni, de akkor nem a ‘class’, hanem a ‘struct’ szót kell használni: Teglalap keret = new Teglalap(); struct Teglalap { public int x; public int y; public int szeles; public int magas; } struct Teglalap { public int x; public int y; public int szeles; public int magas; } x=0, y=0,

Ha C#-ban a struct-al definiálunk egy példányt:  Nem kell a new kulcsszót használni a példányosí- táshoz  Ha nem használjuk a new kulcsszót, akkor a struktúra mezőinek nem lesz kezdőértéke (memóriaszemét)  Ilyen osztály mezőire nem használhatunk kezdőértékadást.  Ezért a struct-nak általában van konstruktora  A paraméter nélküli (default) konstruktort a nyelv automatikusan készíti. Mi csak paraméteres konstruktort készíthetünk!

A struct típus korlátozott OOP tulajdonságokkal rendelkezik, pl. nem működik rá az öröklődés semmilyen formában (egy struct nem lehet ős, ő nem lehet gyermek) Ugyanakkor a struct őse is az Object Viszont implementálhat interface-t A példányosítás kevesebb memóriát igényel, mert a példány nem kerül +4 byte-ba a referencia tárolása miatt.

Amíg a struktúra mezői nincsenek feltöltve, addig nem használható fel (undefined). int a; int b = a+1; int a; int b = a+1; int a = 0; int b = a+1; int a = 0; int b = a+1; int a = new int(); int b = a+1; int a = new int(); int b = a+1; Az ‘int’ név valójában alias neve a System.Int32-nek! namespace System { struct Int32 {... } } namespace System { struct Int32 {... } } using System; Int32 a = new Int32(); using System; Int32 a = new Int32();

int[] ertekek = new int[20];... foreach(int a in ertekek) { a = 0; // hibás !!! } int[] ertekek = new int[20];... foreach(int a in ertekek) { a = 0; // hibás !!! } A fenti kód azért hibás, mert a tömbben lévő értékeket a foreach ciklus sorban átmásolja az ‘a’ változóba. De az ‘a’ változóba történő értékadás nem másolódna vissza automatikusan a vektor megfelelő elemébe, ezért értelmetlen…

ArrayList tanulok = new ArrayList();... foreach(Tanulo t in tanulok) { t.neve = ”Pista”; } ArrayList tanulok = new ArrayList();... foreach(Tanulo t in tanulok) { t.neve = ”Pista”; } A fenti kód azért nem hibás, mert nem a ‘t’ változó értékét módosítjuk, hanem az általa mutatott memória-területen végzünk módosításokat. Azt szabad…

string s = ”Hello”; string x = s; string s = ”Hello”; string x = s; A String típus nem value-type, hanem reference-type… cím ”Hello” cím... s s x x

string s = ”Hello”; string x = s+” akarki”; string u = s.ToUpper(); string s = ”Hello”; string x = s+” akarki”; string u = s.ToUpper(); A String típus nem value-type, hanem reference-type… cím ”Hello” ”Hello akarki” ”HELLO” x x s s cím u u

string s = ”a=”+a.ToString()+” Ft”; A String összefüzés nem túl hatékony: 1.valahol„a=„ 2.elkészül a„a=12” 3.elkészül a „a=12 Ft” A közben keletkezetett rész-eredményeket a GC majd el fogja takarítani… idővel… s = s.Trim().ToUpper(); Első körben s-ről levágja a bevezető és záró white space-kat (eredeti s-t a GC eltakarítja), majd nagybetűre alakítja (előző változatot GC eltakarítja)

String ki = ”a=”+a.ToString()+” Ft”; StringBuilder s = new StringBuilder(); s.Append( ”a=” ); s.Append( a.ToString() ); s.Append( ”Ft” ); string ki = s.ToString(); String ki = ”a=”+a.ToString()+” Ft”; StringBuilder s = new StringBuilder(); s.Append( ”a=” ); s.Append( a.ToString() ); s.Append( ”Ft” ); string ki = s.ToString(); string ki = String.Format(”a={0} Ft”,a); vagy… Ha egy string típusú értékhez folyamatosan hozzá- fűzünk, akkor célszerűbb a System.Text.StringBuilder egy példányát használni!

void Atallit(string s) { s = s+” es Juliska”; } void Atallit(string s) { s = s+” es Juliska”; } string mese = ”Jancsi”; Atallit( mese ); Console.WriteLine( mese ); string mese = ”Jancsi”; Atallit( mese ); Console.WriteLine( mese ); Mi fog kiíródni a képernyőre? cím ”Jancsi és Juliska” ”Jancsi” cím mese s s

void Atallit(ref string s) { s = s+” es Juliska”; } void Atallit(ref string s) { s = s+” es Juliska”; } string mese = ”Jancsi”; Atallit( ref mese ); Console.WriteLine( mese ); string mese = ”Jancsi”; Atallit( ref mese ); Console.WriteLine( mese ); Mi fog kiíródni a képernyőre? ”Jancsi és Juliska” ”Jancsi” cím mese s s