C sharp visual studioban ,hogyan tudok lefutatni egy classt?
szóval most ismerkedem az objektum orientált programozásal és létre hoztam egy új classt próba képen.
De ha f5 el inditom a futatást az első class tartalma fut le.
Hogy lehet válogatni ,hogy melyik fusson le?
Te most úgy alapjában véve félreérted az objektumorientáltság működését. És úgy látom, hogy más téren is hiányosságaid vannak, így inkább adok egy részletesebb választ, ami talán segít megérteni, mi miért történik.
1.
Kezdjük azzal a résszel, amihez még nem kell az OOP. Az egyik fogalom, amit ismerned kell az az, hogy mi az a belépési pont (entry point). A belépési pont nem más, mint a szoftver kódjában egy olyan pont, ahol a program végrehajtása elkezdődik. Az egyszerűség kedvéért most mondjuk azt, hogy belépési pontból egy van, és ezt te már C#-ból jól ismered:
class Program {
public static void Main(string[] args) {}
}
Persze ezt lehet így is írni, majdhogynem ugyanazt jelenti:
class Program {
public static int Main(string[] args) { return 0; }
}
C#-ban a program belépési pontja nem más, mint a Program osztálynak a Main() metódusa. A Main()-ban található első utasítás lesz a programod legelső művelete, illetve a programod addig fog futni, amíg a Main() metódusod futása véget nem ér.
2.
Felmerül benned a kérdés, hogy mi ez az "int Main" dolog akkor?
A számítógépes programok azért léteznek, hogy elvégezzenek valamilyen feladatot. Például töltsön le egy általad megadott YouTube videót, vagy nyomtasson ki egy dokumentumot. Ezt a feladatot a gép vagy sikeresen teljesíti, vagy nem. Ezt tudjuk meg az ún. kilépési kódból. Szabvány szerint, ha a program kilépési kódja 0 volt, akkor a program a feladatát sikeresen elvégezte (ha a "void Main"-es alakot használod, akkor mindig 0 lesz a kilépési kód). Ha bármi más nem 0 kilépési kódot ad vissza (negatív szám is lehet), akkor ott valami hiba volt. Nagyon jó esetben csak a kilépési kódot megnézve konkrétan megtudjuk, mi volt a hiba, mivel különböző esetekhez különböző szám rendelhető hozzá, amit remélhetőleg a program ismertet a felhasználóval.
Hogy néz ki ez a gyakorlatban?
Például azt a kódot, amit eddig így írtál meg:
public static void Main(string[] args) {
...
if (valami hiba történt)
Environment.Exit(1);
...
}
Azt szebben így írhatod meg:
public static int Main(string[] args) {
...
if (valami hiba történt)
return 1;
...
return 0;
}
És hogyan tudod megnézni, hogy mi volt a kilépési kód?
Nyiss egy parancssort (cmd.exe) és abban futtasd le a programod:
C:\> programom.exe
Adj meg egy számot: sajt
Hiba: nem számot adtál meg.
C:\> echo %ERRORLEVEL%
1
És hogy mindennek mi értelme van?
Így önmagában ez nem látszik. De többnyire ezek a parancssoros programok nagyon jól automatizálhatóak shell scriptekkel, hogy komplexebb feladatot oldj meg velük. Például képzeld el, hogy összegyűjtöttél egy csomó linket a YouTube-ról egy TXT fájlba, és szeretnéd letölteni őket, majd átalakítani MP3 zenévé. Szóval beszerzed a youtube-dl és az ffmpeg programokat (amik egyébként ugyanolyan parancssoros programok, mint amiket most te írsz). Írsz egy shell scriptet, ami végigmegy a TXT fájlban lévő linkeken, a youtube-dl letölti a videót, és ha az sikerül (ezt tudod meg a kilépési kódból), akkor ffmpeg-gel MP3-at csinálsz belőle.
=: Itt kezdődik a várva várt OOP-s rész :=
Az OOP az az eljárásorientált nyelveknek egy kiterjesztése. Tehát ahhoz, hogy egyáltalán megértsd az OOP-t, azelőtt már ismerned kell az eljárásorientált nyelvek fogalmait, mint például:
- függvények
- eljárások
Ha nem tudod, hogy ezek mit jelentenek, szólj, és elmagyarázom ezt is.
Magának az objektumorientált szemléletnek két fő fajtája van:
- létezik az ún. osztályelvű OOP (C#-ban ezzel dolgozol)
- és létezik az ún. prototípus-alapú OOP (amelyet például a JavaScript és a Lua nyelvek használnak).
Ezért olyan furcsa C# után a JavaScript, mert más gondolkodásmódot követ.
Az osztályelvű OOP két fontos fogalomra épül:
- az osztály
- az objektum.
Az osztály a szakma szerint nem más, mint az osztályelvű OOP által használt absztrakt modellező eszköz.
Mindeközben te: hogy mivan?!
Ha megfigyeled a világot, amelyben élsz - ha most körülnézel magad körül, entitásokat fogsz látni. Tárgyakat, élőlényeket, jelenségeket, fogalmakat. Amikor programot írsz, idővel észreveheted majd, hogy a való életbeli entitásokra fog épülni a programod. Az OOP nagy előnye az lesz, hogy úgy tekinthetsz a programodra, mintha a mi világunknak egy kis modelljét készítenéd el.
Tehát, amikor programozol, valójában modellezel is. A világunk ugyanis túl komplex, a számítógépünkben lévő RAM és tárhely pedig véges mennyiségű, hogy mindent tároljunk. Így szűrni fogod azt, hogy mi kell a mi világunkból, és mi nem. A programod világában pedig csak azokat az entitásokat hozod létre, amelyek a programod szempontjából lényegesek.
Ez a modellezés egy két lépcsős folyamat.
Első lépésként kiválogatod azokat az entitásokat, amely a program számára fontosak. De még ezeknek az entitásoknak is sok olyan tulajdonsága és viselkedése van, ami a programod számára nem feltétlen szükségesek, így második lépésként kiszűröd a programod számára fontos tulajdonságokat és viselkedéseket.
Például képzelj el egy könyvtárkezelő szoftvert.
Fontosak lesznek olyan entitások, mint:
- könyv
- könyvtáros
- kölcsönző személyek
- a kölcsönzés, mint folyamat
stb.
De nem lesz fontosak olyan entitások, mint:
- a bolygók
- a folyók
- az autók
Na de a kölcsönző személyeket nézve is van mit szűrni. Ugyanis a szoftver szempontjából fontos lesz:
- a neve
- a lakcíme
- az életkora
- a születési helye és ideje
- a biológiai neme
De nem fontos például a hajszíne, a testmagassága, stb.
Ahhoz, hogy ezeknek a modelljét elkészíthessük, tehát hogy a programunk kis világában ezek az entitások ismertek legyenek, osztályokat kell létrehoznunk. Az osztály teszi lehetővé azt, hogy az entitás tulajdonságait és viselkedéseit leírjuk benne:
class KolcsonzoSzemely {
public string Nev { get; set; }
public string Lakcim { get; set; }
public int Eletkor { get; set; }
public void Kolcsonoz(string konyvCim) {
Console.WriteLine($"{Nev} kikölcsönözte a {konyvCim} című könyvet.");
}
//és így tovább.
}
Ezzel oké, hogy leírtuk azt, hogy a világban létezHET a kölcsönző személy, és ezekkel a tulajdonságokkal és viselkedésekkel kell rendelkeznie, de ezzel így önmagában még semmit sem tudunk kezdeni. Ahhoz, hogy megjelenjen egy konkrét személy, aki ki akar kölcsönözni egy könyvet, ún. példányosításra van szükség.
A példányosítás az a folyamat, aminek végeredményeképp az osztálynak létrejön egy példánya, vagyis az objektum. A nagy különbség az osztály és az objektum között az, hogy az objektumnak van állapota - ami azt jelenti, hogy az osztályban leírt tulajdonságok az objektumban most már konkrét értékeket vehetnek fel, és csinálhatnak is dolgokat. Például:
public static void Main(string[] args) {
.. KolcsonzoSzemely kolcsonzo = new KolcsonzoSzemely() {
.. .. Nev = "Pista",
.. .. Lakcim = "Humbákfalva, Álom utca 1.",
.. .. Eletkor = 26
.. };
.. KolcsonzoSzemely kolcsonzo2 = new KolcsonzoSzemely() {
.. .. Nev = "Józsi",
.. .. Lakcim = "Humbákfalva, Kossuth utca 25.",
.. .. Eletkor = 42
.. };
}
Vegyük rá Pistát arra, hogy kikölcsönözzön egy könyvet:
public static void Main(string[] args) {
.. KolcsonzoSzemely kolcsonzo = new KolcsonzoSzemely() {
.. .. Nev = "Pista",
.. .. Lakcim = "Humbákfalva, Álom utca 1.",
.. .. Eletkor = 26
.. };
.. kolcsonzo.Kolcsonoz("Harry Potter és a Bölcsek Köve");
}
Persze még rengeteg dolog tartozik ide, de egyelőre legyen annyi elég, hogy ezt megérted. Ha kérdésed van, szívesen segítek.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!