Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.