slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Microsoft.NET környezet PowerPoint Presentation
Download Presentation
Microsoft.NET környezet

Loading in 2 Seconds...

play fullscreen
1 / 12

Microsoft.NET környezet - PowerPoint PPT Presentation


  • 67 Views
  • Uploaded on

Microsoft.NET környezet. Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz. 1. Interface - közös ős helyett. class TElso:TValamilyenOs { public string info() { return ”Hello, én TElso vagyok!”; } } class TMasodik {

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Microsoft.NET környezet' - mireya


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

Microsoft.NET környezet

Hernyák Zoltán

Programozási Nyelvek II.

Eszterházy Károly Főiskola

Számítástudományi tsz

1

slide2

Interface - közös ős helyett

class TElso:TValamilyenOs

{

public string info() { return ”Hello, én TElso vagyok!”; }

}

class TMasodik

{

public string info() { return ”Hello, én TMasodik vagyok!”; }

}

void LekerInfo( ??? x )

{

string s = x.info();

}

Mit válasszunk „x” típusának, hogy mindkét osztályból származó

példányra működjön a fenti példa?

2

slide3

Interface - közös ős helyett

void LekerInfo( Object x )

{

string ret = String.Empty;

if (x is TElso) ret = (x as TElso).info();

if (x is TMasodik) ret = (x as TMasodik).info();

return ret;

}

Mi a probléma ezzel a megoldással?

Ha újabb osztályok bukkannak fel, akiknek van

info() metódusuk, akkor újabb ‘if’-eket kell írni…

3

slide4

Interface - közös ős helyett

A probléma:

Van két (vagy több) objektumosztályom, amelyeknek vannak

közös vonásaik (egyforma nevű és paraméterezésű metódusaik),

de nem állnak egymással ‘rokonságban’ ezen a téren –

nem egymásból lettek származtatva. Nincs olyan

közös ősük, amelyiknek már megvan ez a közös

metódusa, még abstract szinten sem.

4

slide5

Interface - közös ős helyett

abstract class TInfo

{

public abstract string info();

}

class TElso:TValamilyenOs, TInfo

{

public overridestring info()

{ return ”Hello, én TElso vagyok!”; }

}

class TMasodik:TInfo

{

public overridestring info()

{ return ”Hello, én TMasodik vagyok!”; }

}

Nem lehet 2 db ős egyszerre!

A fenti megoldás sajnos nem működik…

5

slide6

Interface - közös ős helyett

interface TInfo

{

string info();

}

class TElso:TValamilyenOs, TInfo

{

public string info() { return ”Hello, én TElso vagyok!”; }

}

class TMasodik:TInfo

{

public string info() { return ”Hello, én TMasodik vagyok!”; }

}

void LekerInfo( TInfo x )

{

string s = x.info();

}

6

slide7

Interface - közös ős helyett

A megoldás:

Az interface-ek nem osztályok!

Nem lehet tőlük örökölni, mert nem tartalmaznak kidolgozott

metódusokat, csak azok szignatúráját (prototípusát).

Nem tartalmazhatnak mezőket, legfeljebb property-ket, de

azoknak is csak a szignatúráját (mint az abstract-ban).

Tartalmazhat indexelő-t is (szignatúrűját).

Az interface-eket arra használjuk, hogy olyan közös

tulajdonságokat írjanak le, amelyek egyébként egymással nem

rokon objektumosztályok között fedezhető fel.

7

slide8

Interface - közös ős helyett

Szabályok:

Az interface-ek-ben lévő metódusok és property deklarációk

mindegyike kötelezően public, ezért az interface belsejében

nem kell ezt külön jelölni, az osztályokban viszont ezt

kötelezően public-ként kell megvalósítani!

Az nincs előírva, hogy a metódust egyszerűen, vagy virtuális

módon kell megvalósítani.

Ha egy osztály ősei között fel van sorolva egy interface neve,

akkor az adott osztály típusilag kompatibilis lesz ezzel

az interface-el. Ekkor azt mondjuk, hogy az adott osztály

implementálja ezt az interface-t.

8

slide9

Interface - közös ős helyett

Egy osztály implementál egy interface-t, ha

- szerepel az ősei között felsorolva

- az interface-ben leírt összes metódust és property-t a megfelelő

szignatúrával megvalósít (tartalmazza a kidolgozását).

Ha egy osztály ‘bevállal’ egy interface-t ősnek, akkor azzal

kötelezettség is jár – meg is kell írni azokat a metódusokat,

public módon!

9

slide10

Interface - közös ős helyett

interface TInfo

{

string gyerekNeve(int sorszam);

double suly

{

get;

set;

}

int fizetes

{

get;

}

int haviFix[int honap]

{

get;

}

}

Metódus

property

Indexelő

10

slide11

Interface - közös ős helyett

Az OOP nyelvek két csoportja létezik:

- interface-t támogató nyelvek (Delphi, C#, Java, …)

- több közös ős is lehet ( C++ )

Itt az elsőnek bemutatott megoldás működik, nem iterface-t

hozunk létre, hanem egy tényleges osztályt, amelyből akár

örökölni

is lehet.

És a

TElso-nek

tényleg

2 őse

van.

abstract class TInfo

{

public abstract string info();

}

class TElso:TValamilyenOs, TInfo

{

public overridestring info() { … }

}

11

slide12

Interface - közös ős helyett

A közös őssel gondok vannak:

class TEgyikOs

{

public int X=0;

}

class TMasikOs

{

public double X=0.0;

}

public class TEgyutt:TEgyikOs, TMasikOs

{

...

}

TEgyutt e = new TEgyutt();

e.x = 12; // ???

12