C#-ban minek kellenek az osztályok? (bővebben kifejtem)
Van ez a program:
class Program
{
static void Main(string[] args)
{
int x, y, z, w;
x = 1;
y = 4;
z = 6;
w = 9;
System.Console.WriteLine("Point 1: ({0}, {1})", x, y);
System.Console.WriteLine("Point 2: ({0}, {1})", z, w);
System.Console.ReadKey();
}
}
}
Ami valójában így néz ki osztályok bevezetésével:
class Point
{
public int x;
public int y;
}
class Program
{
static void Main(string[] args)
{
Point start = new Point();
Point end = new Point();
start.x = 1;
start.y = 4;
end.x = 6;
end.y= 9;
System.Console.WriteLine("Point 1: ({0}, {1})", start.x, start.y);
System.Console.WriteLine("Point 2: ({0}, {1})", end.x, end.y);
System.Console.ReadKey();
}
}
}
Mivel más vagy hatékonyabb a második kód az elsőtől?
szia,
a második kód objektumorientált, az első kód nem. a nem objektumorientált hatékonyabb, de az objektumorientált jobban karbantartható, bővíthető, rugalmasabb, átláthatóbb.
sajnos még túl alacsony szinten van a tudásod, hogy igazán megértsd, miért jobb a másodikat használni. akkor lesz igazán értelme, amikor már megérted mi az az öröklődés, metódus felülírás, stb...
így amúgy az objektum orientált kód szebb lenne:
Point start = new Point(1,4);
Point end = new Point(6,9);
System.Console.WriteLine("Point 1: " + start.ToString());
System.Console.WriteLine("Point 2: " + end.ToString());
És amint látod, még ilyen rövid kódnál is ez jóval átláthatóbb. A ToString (kiíró) metódust ráadásul felül is lehet írni, és egyedi megjelenítsd adhatsz az osztályaidnak. Ugyanúgy tetszőleges műveleteket adhatsz egy osztálynak. Elrejtheted a használója elől a belső működést, stb... Erről száz és száz oldalakat lehetne írni, szóval csak azt tudom ajánlani, hogy légy türelemmel.
Az objektum orientáltság egy szemlélet mód, nem a hatékonyságról szól. A kód átláthatóságában, karbantarthatóságában és bővíthetőségében segít. Amit írtál az még nem igazán objektum orientált csak egy struktúrába rendezd az összetartozó adatokat. De mi lenne ha nem csak 2 objektumod lenne hanem sok és nem csak 2 összetartózó adattal dolgozol hanem sokkal? Mindegyikhez külön változót fogsz csinálni? Mi van ha lenne 1000 pontod és mindegyiknek ki szeretnéd íratni a koordinátáját?
1. Használj saját konstruktort, ne külön töltsd fel az adatokat:
Point start = new Point(1, 4);
Point end = new Point(6, 9);
2. Ha a kiírás a pontra jellemző, akkor az legyen a pont metódusa:
start.print();
end.print();
3. Ha rengeteg pontod van, nyilvántarthatsz róluk egy kollekciót, amit ráadásul a konstruktor révén automatikusan megtehetsz és egységesen kezelheted az összes pontot, nem külön-külön egyesével.
Ez utóbbival rengetegszer fogsz találkozni. Nem tudsz 1000 pontot úgy kezelni hogy ne lenne az objektum.
hát, tegyük fel, hogy az a feladatod, írj egy programot, ami grafikus felületre kirajzol egy kört, négyzetet vagy egy háromszöget. és elforgatja őket 360 fokkal.
már épp kész vagy, mikor jön a főnök megnézni,és szól, hogy jó lenne, ha egy amőba alakzatot is hozzá adnál a listához.
megcsinálod, nézi a főnök, de szól, hogy nem jó, mert ő szeretné, ha az amőba nem a középpontja körül forogna, hanem egy elforgatási pont körül, nem úgy mint a többi alakzat, amiknek a középpontjaik körül kellene forogniuk. emellett szeretné, ha rákattintunk az alakzatokra, akkor lejátszanak valamilyen hangot.
már kezdenél nekiállni átírni a dolgokat, de szól a főnök, hogy a másik osztályon már használják az általad eddig elkészített kódokat (kör,háromszög,négyzet), és úgy módosítsd a jelenlegi kódot, hogy visszafelé kompatibilis legyen.
szóval ilyen problémákra született az objektumorientáltság. a használatával elég könnyen meg lehet ezt az egészet valósítani, úgy hogy csak kicsit változtatsz a kódokon, és nem is piszkálod azt amire nincs szükség.
létrehozol egy ősosztályt (síkidom), megadod a műveleteket rajta. származtatsz belőle további síkidomokat, amiknél szükség esetén felüldefiniálod az alap viselkedést, vagy újakat írhatsz hozzájuk.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!