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

Hernyák Zoltán Magasszintű Programozási Nyelvek I.

Hasonló előadás


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

1 Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Alprogramok Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz 1

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

3 Alprogramok 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… 3

4 Alprogramok Alprogramok (eljárások) 4

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

6 kívül vagyunk ‘x’ hatáskörén
Alprogramok 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 6

7 kívül vagyunk ‘x’ hatáskörén
Alprogramok 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 7

8 Ez két különböző ‘x’ változó!
Alprogramok 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ó! 8

9 A STATIC változók közösek az alprogramokban!
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! 9

10 Alprogramok static int x; 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. 10

11 Alprogramok static int x; 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

12 Alprogramok static int x; class Akarmi {
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! 12

13 De csak ha PUBLIC jelöléssel is el van látva!
Alprogramok 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! 13

14 Alprogramok 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ó! 14

15 Alprogramok 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. 15

16 Alprogramok 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 16

17 Alprogramok 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; } 17

18 Alprogramok minden függvény legalább 1 db return-t
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! 18

19 Alprogramok 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” 19

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

21 Alprogramok 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 21

22 Alprogramok 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… 22

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

24 Alprogramok 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! 24

25 Alprogramok 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 25

26 Alprogramok 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; } Formális paraméterlista Formálisan változódeklaráció-lista (típus + név párosok) 26

27 Alprogramok Formális paraméterlista:
static bool Van_e_zero( int[] tomb, int ertek ) { … } 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 27

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

29 Alprogramok Aktuális paraméterlista – értékeket tartalmaz
bool b = Van_e( elemek, 0 ); tomb = elemek ertek = 0 static bool Van_e ( int[] tomb, int ertek ) 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. 29

30 Alprogramok 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) 30

31 Alprogramok 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) bool b = Akarmi( 0 ); static bool Akarmi ( double ertek ) 31


Letölteni ppt "Hernyák Zoltán Magasszintű Programozási Nyelvek I."

Hasonló előadás


Google Hirdetések