Hogy kell megvalósítani valamit objektum orientáltan? C++
Létre tudok hozni osztályokat objektumokat stb.
De nem értem,hogy tudok O.O megvalósítani valamit.
pl. Egy adatbázis kezelő programot amit már meg írtam csak nem O.O.
Az adatbázis kezelő tud regisztrálni egy új tagot.
Tud törölni tagot.
Meg tudja keresni a tagokat nevük alapján és ki tudja íratni a tag adatait.
O.O ti,hogy valósítanátok meg egy ilyen feladatot C++ ban.
Valami ilyesmi (pszeudo-kód):
class database:
Disregard that, I suck cocks.
Tehát:
class database:
function connect()
function add()
function delete()
function search()
És akkor az objektum tárolja az adatbázis kapcsolódási információit, magát a kapcsolatot stb., és az eljárásain keresztül kell az adatbázissal kommunikálni.
Jöhetnek még válaszok mert még nem nagyon értem.
Nem úgy kell,hogy létrehozok külön osztályt a törlésre meg a regisztrációra meg a keresésre.
18:10 válaszoló elég jó választ adott kezdem érteni azért.
De az a connect függvény az mit csinál ott?Mi lenne a feladata?
És új osztályt mikor kell létrehozni?És egy másik osztályt be illeszteni egy másikba?
Adott probléma dönti el mindig, hogy milyen osztályokba kell szervezni a programot. Nincs rá általában elfogadott "helyes" módszer. Ötleteket adhatnak a design pattern ill. architekturális patternek, de egyébként te döntesz.
Adatbázis kezelő alatt mit értesz? Egy kliens program, ami egy adatbázis-szerverhez, esetleg file-hoz csatlakozik?
Általában erre valami n-layer architekturát használnak, ahol az n leginkább 3 szokott lenni.
Azaz van egy adatbázis-kapcsolat interfész, egy üzleti logika réteg, meg egy user interface.
Tehát pl. van egy olyan absztrakt ős-osztályod, hogy DBConnection. Ez definiál néhány pure virtual függvényt, mint Open, Close, ExecuteQuery, stbstb.
Az üzleti logika rétege ezt az őst használja, ami mögött nyilván egy konkrét implementáció van, pl. ami MS SQL-hez kapcsolódik.
Az üzleti logika réteg(ami egyszerűbb esetben szintén egyetlen osztály) ugyanakkor az user interface-re is tartalmaz egy referenciát(ez szintén valami absztrakt ős), kezeli az onnan jövő eseményeket(gombnyomások, stb.), és végrehajtja az adatbázis-kapcsolaton a megfelelő műveleteket.
Egy példa:
Van egy ablakos programod, ami mondjuk annyit tud, hogy van rajta egy TextBox, meg egy Button.
Azt akarod, hogy a ha megnyomja a button-t, akkor a DB-be kerüljön be a TextBox-ba beírt nevű felhasználó.
Ekkor mondjuk lesz egy user interfészként szolgáló osztályod, aminek van 3 függvénye: SubscribeButtonClick, GetTextBoxContent, meg ShowMessage.
Ebből az interfészből fog származni az ablakod, és ő fogja megvalósítani azt a 3 függvényt.
SubscribeButtonClick : paraméterként kap egy paraméter nélküli void function pointer-t, és azt eltárolja valahol.
Ezt a függvényt fogja meghívni az ablak, ha megnyomják a gombot.
GetTextBoxContent: visszaadja a Textbox aktuális tartalmát.
ShowMessage: ez feldob egy dialog messagebox-ot a megadott tartalommal.
A második osztályod mondjuk az lesz, hogy class BusinessLogic, ennek a konstruktorában kapsz egy pointer-t egy user interface-re, meg egyet egy DBConnection-re.
A BusinessLogic-od pl. azt csinálja, hogy a SubscribeButtonClick-re feliratkozik egy függvénnyel.
Abban a fügvényben:
1. GetTextBoxContent-tel elkéri a beírt nevet
2. DBConnection.Open()
3. DBConnection.ExecuteQuery-vel lekéri, hogy van-e már ilyen nevű felhasználó. Ha van, akkor meghívja a DBConnection.Close-t, a userinterface ShowMessage függvényét egy olyan paraméterrel, pl. hogy ShowMessage("Hiba : A felhasználó már létezik."), majd ezután kilép a függvényből.
4. Ha nem létezik a felhasználó, akkor az ExecuteQuery-vel beszúrja, pl. ExecuteQuery("INSERT INTO users VALUES('Géza Béla')", ahol Géza Béla nyilván a textbox tartalma lesz. Ezután DBConnection.Close(), és vége.
Ez egy egyszerű példa, hogyan tudod osztályokba szervezni a programodat.
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!