Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:basic:visual_basic:visual_basic_.net_objektum_orientaltan

< Visual Basic

Visual Basic .Net Objektum Orientáltan

  • Szerző: Sallai András
  • Copyright © Sallai András, 2017
  • Licenc: GNU Free Documentation License 1.3

Bevezetés

A Visual Basic .Net használható modulárisan és Objektumorientáltan egyaránt. Az alábbi leírás az Objektum Orientált használattal foglalkozik.

Az objektum orientált programokban osztályokkal dolgozunk. Ha csak modulárisan programozunk, akkor is használunk meglévő osztályokat, de objektum orientált programozás esetén saját osztályokat hozunk létre és ez képezi a munkánk törzsét.

Helló Világ

Program01.vb
Public Class Application
	Public Shared Sub Main()
		Console.WriteLine("Helló Világ")		
	End Sub
End Class

Fordítás Mono keretrendszerrel:

vbnc Program01.vb

Fordítás .Net keretrendszerrel:

vbc Program01.vb

Futtatás Mono keretrendszerrel:

mono Program01.exe

Futtatás .Net keretrendszerrel:

Program01.exe

Linux rendszeren futtatás lehet így is:

chmod +x Program01.exe
./hello.exe

Objektum Orientált program esetén – mint azt már fentebb írtuk –, a programjainkat osztályokba szervezzük. Ezt angolosan a class szóval írjuk le. Az osztálynak valamilyen nevet kell adni, és kötelezően publikusnak kell meghatározni:

public class név

A public azért szükséges, hogy a futtató keretrendszer hozzáférjen az osztályhoz.

Az osztályokon belül metódusokat hozunk létre, amelyeknek szintén valamilyen nevet kell adnunk. Egy program mindig kötelezően kell tartalmazzon egy Main() metódust. A futtató keretrendszer ebből tudja, hogy ebben a metódusban megadott utasításokat kell elsőként végrehajtani. A Main() metódusnak van két kötelező előtagja, a public és a shared:

Public Shared Main()

A public szükséges a futtató keretrendszernek, hogy hozzáférjen a metódushoz. A shared pedig azt mondja meg, hogy példányosítás nélkül futtatható metódusról van szó. A Main() metódust mindig példányosítás nélkül futtathatóra állítjuk.

Osztály létrehozása

A példa kedvéért tároljunk dolgozókról információkat. Az egyszerűség kedvéért legyen most két eltárolandó érték, a név és az életkor. Az osztályoknak lehetnek mezői vagy tulajdonságai. A név és az életkor a Dolgozo osztály mezői.

Application.vb
Public Class Dolgozo
	public nev As String
	public kor As Integer
End Class
 
Public Class Application
	Public Shared Sub Main()
 
		Dim janos As New Dolgozo()
		janos.nev = "Nagy János"
		janos.kor = 35
 
		Console.WriteLine(janos.nev)
		Console.WriteLine(janos.kor)
 
	End Sub
End Class

Az osztály létrehozása után példányosítani kell azt. A fenti példában a példány létrehozása a következő:

Dim janos As New Dolgozo()

A janos, a Dolgozo osztály egy példánya.

Metódusok használata

Egy osztály mezőit az Objektum Orientált Programozást elvét figyelembe véve nem szoktunk publikusként megadni. De akkor hogyan férünk hozzá? Az egyes adatmezőkhöz metódusokkal fogunk hozzáférni, amelyeket már publikusként hozunk létre. A metódust szót, az Objektum Orientált Programozásban az eljárásokra és a függvényekre használjuk, azok helyett. A következő példában a „nev” mező számára létrehozunk egy beállító és egy lekérdező metódust:

Program01.vb
Public Class Dolgozo
	private nev As String
	private kor As Integer
	public Sub beallitNev(ByVal atvettNev As String)
		nev = atvettNev
	End Sub
	public Function lekerNev() As String
		Return nev
	End Function
End Class
 
Public Class Application
	Public Shared Sub Main()
 
		Dim janos As New Dolgozo()
		janos.beallitNev("Nagy János")		
 
		Console.WriteLine(janos.lekerNev())
 
	End Sub
End Class

A fentiek alapján, ugyanezt kell tennünk a kor mezővel is:

Program01.vb
Public Class Dolgozo
	private nev As String
	private kor As Integer
	public Sub beallitNev(ByVal atvettNev As String)
		nev = atvettNev
	End Sub
	public Function lekerNev() As String
		Return nev
	End Function
	public Sub beallitKor(ByVal atvettKor As Integer)
		kor = atvettKor
	End Sub
	public Function lekerKor() As Integer
		Return kor
	End Function
End Class
 
Public Class Application
	Public Shared Sub Main()
 
		Dim janos As New Dolgozo()
		janos.beallitNev("Nagy János")
		janos.beallitKor(35)
 
		Console.WriteLine(janos.lekerNev())
		Console.WriteLine(janos.lekerKor())
 
	End Sub
End Class

Az osztály mezői meghatározzák annak tulajdonságait, a metódusok meghatározzák az osztály viselkedését. Az osztállyal egy egységbe zárjuk az adatok és hozzájuk tartozó metódusokat, ezt hívjuk egységbezárásnak (encapsulation).

Konstruktor

A fenti kódunkat kiegészítjük a konstruktorral:

Program01.vb
Public Class Dolgozo
	private nev As String
	private kor As Integer
	public Sub New()
		nev = "Névtelen"
		kor = -1
	End Sub
	public Sub beallitNev(ByVal atvettNev As String)
		nev = atvettNev
	End Sub
	public Function lekerNev() As String
		Return nev
	End Function
	public Sub beallitKor(ByVal atvettKor As Integer)
		kor = atvettKor
	End Sub
	public Function lekerKor() As Integer
		Return kor
	End Function
End Class
 
Public Class Application
	Public Shared Sub Main()
 
		Dim janos As New Dolgozo()
		'janos.beallitNev("Nagy János")
		'janos.beallitKor(35)
 
		Console.WriteLine(janos.lekerNev())
		Console.WriteLine(janos.lekerKor())
 
	End Sub
End Class

A konstruktor kiemelve az egész kódból:

public Sub New()
	nev = "Névtelen"
	kor = -1
End Sub

A konstruktort arra szokás használni, hogy előkészítsünk egy osztályt, kezdőértéket adjunk az osztály mezőinek. Mi is ezt tettük a „nev” és a „kor” mező is kapott egy-egy kezdőértéket. Így, ha elfelejtjük például a nevet beállítani, akkor a megjelenített név „Névtelen” lesz, és nem üres karaktersorozat.

Metódus túlterhelés

Mi lenne, ha a konstruktort meg tudnánk hívni úgy is, hogy paraméterként megadjuk mi legyen a dolgozó neve, de megmaradna az a lehetőség is, hogy nem adunk meg paramétert:

public Sub New()
	nev = "Névtelen"
	kor = -1
End Sub
public Sub New(ByVal atvettNev As String)
	nev = atvettNev
	kor = -1
End Sub

A konstruktor így két módon használhatjuk. Hívhatjuk paraméter nélkül és névparaméterrel. A konstruktort túlterheltük.

Nem csak a konstruktort lehet túlterhelni, bármelyik metódussal megtehető. A példa kedvéért, legyen egy beallitDolgozo() metódus, amelyik több alakkal is rendelkezik.

public Sub beallitDolgozo(ByVal atvettNev As String)
	nev = atvettNev
	kor = -1
End Sub
public Sub ballitDolgozo(ByVal atvettNev As String, ByVal atvettKor As Integer)
	nev = atvettNev
	kor = atvettKor
End Sub

A beallitDolgozo metódust túlterheltük. Meghívható egy vagy két paraméterrel is.

Öröklés

Szeretnénk egy dolgozó számára diplomájának számát is tárolni. De a Dolgozo osztályt szeretnénk meghagyni. Készítünk egy Mernok nevű osztályt. Mivel a mérnöknek is van neve és életkora, ezért felhasználjuk a már meglévő Dolgozo osztályt. A Dolgozo osztály minden tagját átörökítjük a Mernok osztály számára.

Public Class Mernok 
	Inherits Dolgozo
	private diploma As String
	public Sub beallitDiploma(ByVal atvettDiploma As String)
		diploma = atvettDiploma
	End Sub
	public Function lekerDiploma() As String
		Return diploma
	End Function
End Class

A Mernok osztályból létrehozott objektum továbbra is használhatja a nev és a kor mezőket.

Többalakúság

A következő példánkhoz kivettük az életkor „kor” mezőjét, a hozzátartozó kódokat, és felvettünk egy új mezőt, amiben a fizetéseket tároljuk. Felvettünk egy szamitFizetes() metódust is, amelyik a jutalommal növelt fizetést adja vissza. A mérnököknek, azonban szeretnénk kicsit több jutalmat adni. Ezért felülírjuk a Mernok osztályban a szamitFizetes() metódust. Vegyük észre, hogy protected elérésűre tettük a fizetés mezőt, mert a Mernok osztályban is el szeretnénk érni.

Program01.vb
Public Class Dolgozo
    private nev As String
    protected fizetes As Double
    public Sub New()
        nev = "Névtelen"		
        fizetes = 500000
    End Sub
    Overridable Function szamitFizetes() As Double
        Dim jutalom As Double = 30000
        Return fizetes + jutalom
    End Function
End Class
 
Public Class Mernok 
	Inherits Dolgozo
    Overrides Function szamitFizetes() As Double
        Dim jutalom As Double = 60000
        Return fizetes + jutalom
    End Function
End Class
 
Public Class Application
	Public Shared Sub Main()
                Dim kati As New Mernok()
                Dim jani As New Dolgozo()
 
                Console.WriteLine(jani.szamitFizetes())
                Console.WriteLine(kati.szamitFizetes())
	End Sub
End Class

A Main() metódusban a szamitFizetes() metódus másként viselkedik jani objektum és másként kati objektum esetén. Ezt nevezzük többalakúságnak (polimorfizmus).

oktatas/programozas/basic/visual_basic/visual_basic_.net_objektum_orientaltan.txt · Utolsó módosítás: 2019/08/21 17:21 szerkesztette: admin