Kezdőoldal » Számítástechnika » Programozás » C#-ban minek kellenek az...

C#-ban minek kellenek az osztályok? (bővebben kifejtem)

Figyelt kérdés

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?


2016. febr. 14. 22:03
1 2
 1/13 A kérdező kommentje:
Arra a "Point start = new Point();"-ra gondolok...
2016. febr. 14. 22:05
 2/13 A kérdező kommentje:
...mert mindkettőnél ugyanaz jelenik meg a képernyőn. Akkor most minek is kell ez a "osztály_név ... = new ... ();"?
2016. febr. 14. 22:17
 3/13 A kérdező kommentje:
Ezt az egészet nem értem, segítsetek! :)
2016. febr. 14. 22:18
 4/13 anonim ***** válasza:

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

2016. febr. 14. 22:20
Hasznos számodra ez a válasz?
 5/13 A kérdező kommentje:
Nem lehetne valahogy mégis elmagyarázni vagy egy megbízható linket adni?
2016. febr. 14. 22:25
 6/13 anonim ***** válasza:

í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.

2016. febr. 14. 22:28
Hasznos számodra ez a válasz?
 7/13 A kérdező kommentje:
C# mesteri szinten 21 nap alatt c. könyvet olvasom, van szó az öröklődésről és az oop fogalmáról, de még nem értem mi haszna van "ezeknek" az átláthatóságon kívül..
2016. febr. 14. 22:28
 8/13 anonim ***** válasza:
szerintem keress egy könyvet a programozásról, ami bejön neked. nem tudom mire van szükséged. a legtöbb online tutorial nem elég részletes, vagy nagyon széttöredezett. nekem az segített sokat, amikor vettem egy könyvet és átrágtam magam rajta, és utána olvastam hozzá dolgokat a netről. én javában programozok, C#-hoz annyira nem értek, így nem nagyon tudok neked könyvet/anyagot ajánlani. bár itt gyakszikérdéseken sokan c#-oznak, de a többségük elég noobnak tűnt. :)
2016. febr. 14. 22:31
Hasznos számodra ez a válasz?
 9/13 anonim ***** válasza:

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.

2016. febr. 14. 22:39
Hasznos számodra ez a válasz?
 10/13 anonim ***** válasza:
100%

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.

2016. febr. 14. 22:42
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!