Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.

Hasonló előadás


Az előadások a következő témára: "1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy."— Előadás másolata:

1 1 Hernyák Zoltán Web: http://dragon.ektf.hu/aroan, E-Mail: aroan@aries.ektf.huhttp://dragon.ektf.hu/aroan Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz http://aries.ektf.hu

2 2 class Akarmi { //……………………………………………………………………. static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”,x); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } class Akarmi { //……………………………………………………………………. static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”,x); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } Az alprogram deklarációja. Az alprogram definíciója (utasítástörzs) Az alprogram aktiválása!

3 3 Alprogramok Van neki neve Utasítástörzse (utasításblokk) Nevével és két zárójellel lehet őket aktivizálni a bennük lévő utasítássorozatot Az utasítások végrehajtása után a program fut tovább az eredeti környezetben…

4 4 Alprogramok (eljárások)

5 5 class Akarmi { //……………………………………………………………………. static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”,x); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } class Akarmi { //……………………………………………………………………. static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”,x); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. }

6 6 class Akarmi { //……………………………………………………………………. static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } class Akarmi { //……………………………………………………………………. static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } ‘x’ itt deklarálatlan, kívül vagyunk ‘x’ hatáskörén

7 7 class Akarmi { //……………………………………………………………………. static void Main() { int x; Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } class Akarmi { //……………………………………………………………………. static void Main() { int x; Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } ‘x’ itt deklarálatlan, kívül vagyunk ‘x’ hatáskörén

8 8 class Akarmi { //……………………………………………………………………. static void Main() { int x; Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } class Akarmi { //……………………………………………………………………. static void Main() { int x; Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } Ez két különböző ‘x’ változó!

9 9 class Akarmi { static int x; static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } class Akarmi { static int x; static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } //……………………………………………………………………. static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } //……………………………………………………………………. } A STATIC változók közösek az alprogramokban!

10 10 class Akarmi { static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } static int x; static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } class Akarmi { static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } static int x; static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } A STATIC változók a teljes CLASS-on belül közösek, függetlenül a deklaráció helyétől! Ellentétben az alprogramok belsejében lévő változódeklarációval, ahol is a deklaráció helyétől LEFELÉ tart a hatáskör.

11 11 class Akarmi { static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } static int x; static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } class Akarmi { static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } static int x; static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } A STATIC változók a teljes CLASS-on belül közösek, függetlenül a deklaráció helyétől! Ellentétben az alprogramok belsejében lévő változódeklarációval, ahol is a deklaráció helyétől LEFELÉ tart a hatáskör.

12 12 class Akarmi { static int x; static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } class Akarmi { static int x; static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } static void Main() { Adatbekeres(); Console.WriteLine(”X={0}”, x ); } Az osztályon belül a STATIC elemek (változók, eljárások) deklarálási sorrendje lényegtelen!

13 13 class Masik { static void Main() { Akarmi.Adatbekeres(); Console.WriteLine(”X={0}”, Akarmi.x ); } class Akarmi { public static int x; public static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } class Masik { static void Main() { Akarmi.Adatbekeres(); Console.WriteLine(”X={0}”, Akarmi.x ); } class Akarmi { public static int x; public static void Adatbekeres() { Console.WriteLine(”X=”); x = int.Parse( Console.ReadLine()); } Másik osztályban lévő STATIC alprogram minősített névvel aktivizálható! De csak ha PUBLIC jelöléssel is el van látva! PUBLIC: a deklaráció hatáskörének kiterjesztése az osztályon kívülre is!

14 14 namespace EgyikNevTer { class Akarmi { public static void Adatbekeres() { … } } namespace MasikNevTer { class Masik { static void Main() { EgyikNevTer.Akarmi.Adatbekeres(); Console.WriteLine(”X={0}”, x ); } namespace EgyikNevTer { class Akarmi { public static void Adatbekeres() { … } } namespace MasikNevTer { class Masik { static void Main() { EgyikNevTer.Akarmi.Adatbekeres(); Console.WriteLine(”X={0}”, x ); } Másik osztályban lévő STATIC alprogram névtér + osztály + alprogram minősített névvel aktivizálható!

15 15 class Akarmi { static int Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); return x; } static void Main() { int x = Adatbekeres(); Console.WriteLine(”X={0}”, x ); } class Akarmi { static int Adatbekeres() { Console.WriteLine(”X=”); int x = int.Parse( Console.ReadLine()); return x; } static void Main() { int x = Adatbekeres(); Console.WriteLine(”X={0}”, x ); } Az alprogram a végén egy számértéket fog előállítani, és visszaadni! return + egy int típusú kifejezés! Az alprogram aktiválása, és a visszatérési érték tárolása változóban.

16 16 Azt az alprogramot, aki értéket állít elő – függvénynek nevezzük A függvényeknél meg kell adni, milyen típusú értéket állítanak elő A nem függvény típusú alprogramokat eljárásoknak nevezzük Az eljárásoknál a visszatérési típust ‘void’ kulcsszóval kell jelölni A void szó a típusnélküliséget jelöli

17 17 A függvényekben a return használata kötelező! Az eljárárásokban is használható a return, de a return mögé ilyenkor semmit sem szabad már írni! static void Main() { int x = Console.ReadLine(); if (x==0) return; … } static void Main() { int x = Console.ReadLine(); if (x==0) return; … }

18 18 static bool Adatbekeres() { Console.WriteLine(”Logikai érték=”); string s = Console.ReadLine(); if (s.ToUpper()==”IGEN”) return true; return false; } static bool Adatbekeres() { Console.WriteLine(”Logikai érték=”); string s = Console.ReadLine(); if (s.ToUpper()==”IGEN”) return true; return false; } return hatására a függvény azonnal befejezi a futását, és visszaadja a megadott értéket! minden függvény legalább 1 db return-t kell tartalmazzon A return egyfajta ugró utasításként viselkedik, azonnal kiugrik a függvény törzséből!

19 19 static bool Adatbekeres() { Console.WriteLine(”Logikai érték=”); string s = Console.ReadLine(); if (s.ToUpper()==”IGEN”) return true; if (s.ToUpper()==”NEM”) return false; } static bool Adatbekeres() { Console.WriteLine(”Logikai érték=”); string s = Console.ReadLine(); if (s.ToUpper()==”IGEN”) return true; if (s.ToUpper()==”NEM”) return false; } A C# fordító szerint nem garantált hogy minden esetben (minden ágon) lesz return ebben az alprogramban. ”Not all code paths returns a value”

20 20 static bool Van_e_zero() { foreach(int x in tomb) if (x==0) return true; return false; } static bool Van_e_zero() { foreach(int x in tomb) if (x==0) return true; return false; } static int Oszeg() { int sum = 0; foreach(int x in tomb) sum += x; return sum; } static int Oszeg() { int sum = 0; foreach(int x in tomb) sum += x; return sum; } A ‘tomb’ egy közös változó a függvények között.

21 21 Paraméterek Az alprogramok valamely al-feladat megoldására vannak kialakítva Az alfeladat megoldásához szükséges adatokat … Az alprogram maga kéri be Közös static változók tartalmazzák Paraméterekben kapja meg

22 22 Paraméterek … Az alprogram maga kéri be Általában nagyon gyenge, nagyon rossz megoldás! Így az alprogram kommunikál is a felhasználóval valamilyen interface-n És számolási műveleteket is végez…

23 23 Three-tier (three-layer) applications Data Storage Data files SQL servers XML Application Logic User Interface Alprogramok ConsoleWEB Windows WAP

24 24 Az alprogram maga kéri be a működéséhez szükséges adatokat Data Storage Application Logic User Interface Az az alprogram amelyik egy időben több rétegbe is tartozik – NEM JÓ! Mivel amennyiben cserélődik a user interface, úgy bele kell javítani az alprogramba is!

25 25 Az alprogram a közös változókban találja meg az adatokat Egy kicsivel jobb megoldás De a közös változó neve több eljárásban is bele van égetve Módosítás esetén sok helyen kell átírni A közös változók élettartama STATIC, vagyis a program elejétől a végéig életben vannak Szorítsuk a minimumra a közös változók használatát

26 26 Az alprogram paraméterekben kapja meg az adatokat A lehető legjobb megoldás (egyelőre) static bool Van_e_zero( int[] tomb, int ertek ) { foreach(int x in tomb) if (x==ertek) return true; return false; } static bool Van_e_zero( int[] tomb, int ertek ) { foreach(int x in tomb) if (x==ertek) return true; return false; } Formális paraméterlista Formálisan változódeklaráció-lista (típus + név párosok)

27 27 Formális paraméterlista: -A paraméter-változók hatásköre csak az alprogramra terjed ki! -Csak az alprogram futási idejében léteznek -Kezdőértéküket a hívás helyén kell megadni static bool Van_e_zero( int[] tomb, int ertek ) { … } static bool Van_e_zero( int[] tomb, int ertek ) { … }

28 28 Paraméter-átadás: static bool Van_e ( int[] tomb, int ertek ) { for(int i=0;i<tomb.Length;i++) if (tomb[i]==ertek) return true; return false; } static bool Van_e ( int[] tomb, int ertek ) { for(int i=0;i<tomb.Length;i++) if (tomb[i]==ertek) return true; return false; } static void Main() { int[] elemek = new int[20]; bool b = Van_e( elemek, 0 ); } static void Main() { int[] elemek = new int[20]; bool b = Van_e( elemek, 0 ); }

29 29 Aktuális paraméterlista – értékeket tartalmaz static bool Van_e ( int[] tomb, int ertek ) bool b = Van_e( elemek, 0 ); tomb = elemek ertek = 0 A hívás során a formális paraméterlistában deklarált változók automatikusan felveszik az aktuális paraméterlistában megadott értéket az értékadás szabályainak megfelelően.

30 30 Aktuális és formális paraméterlista A háttérbeni értékadó utasítás miatt: -Az aktuális paraméterlista pontosan annyi elemet kell tartalmazzon, mint a formális paraméterlista (ugyanis nincs alapértelmezett kezdőérték a paraméterváltozókra)

31 31 Aktuális és formális paraméterlista A háttérbeni értékadó utasítás miatt: Az aktuális paraméterlistában megadott érték az értékadó utasításoknál is megbeszélt típus-kompatibilitási szabályok szerinti típusúnak kell lennie (vagyis vagy megegyezik az érték típusa a fogadó változó típusával, vagy implicit típuskonverzió kell legyen a két típus között) static bool Akarmi ( double ertek ) bool b = Akarmi( 0 );


Letölteni ppt "1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy."

Hasonló előadás


Google Hirdetések