Kezdőoldal » Számítástechnika » Programozás » Nem OOP-s kód újratervezése....

Nem OOP-s kód újratervezése. Hogyan érdemes?

Figyelt kérdés

Adott egy nem objektumorientált nyelv, ebben egy kód. Felrajzoltam egy gráfot, ahogy a benne levő függvények hívják egymást, illetve, hogy milyen globális változókat használnak. "Mindenki hív mindenkit..." :S

Vannak függvények, amik nem hívnak kifele, illetve vannak, amit csak egy függvényből hívunk meg, és hát vannak a több függvényből hívott függvények, akik maguk is hívnak kifele. Hurkok azért nincsenek. :)


Ami zavar: túl sok a globális változó, akikre végig figyelni kell, ki mit módosít rajta. Nem tartozik senkihez, nincsenek osztályok eleve a nyelvben.


Léteznek erre bevált technikák, esetleg ezekről weboldal, vagy valamiféle online elérhető írás / video? Pillanatnyilag úgy érzem, nem kellően átlátható a kód, pedig kritikus. Ha tudtok hasznos segítséget, megköszönném!



#optimalizálás #refactoring #struktúrális programozás
2013. márc. 28. 11:26
 1/6 iostream ***** válasza:
Hogyne lenne. Refaktorálásnak hívják, és igen bő irodalma van. Google a barátod.
2013. márc. 28. 11:30
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:
A nevét tudom, ezért is van a kulcsszavak között, de ahogy elnéztem, mindenáron OOP-re akarnak refaktorálni mindent, holott az nem támogatott. Igaziból ennél kicsit specifikusabb segítségnek jobban örülnék.
2013. márc. 28. 11:47
 3/6 iostream ***** válasza:

Globális változókat pl úgy tudsz kiírtani, hogy ahol használod egy függvényben ott bekerül a paraméterlistába, és a törzsében pedig a paramétert használod.

A hívás kuszasága normális, viszont a függvényeket hierarchiákba szedheted: adott szint csak adott szinten és attól lefel hívhat, felfele nem. Így mindjárt átláthatóbb lesz.


Ami a legfontosabb, hogy kis lépésekben kell haladni, úgy, hogy a funkcionalitást mindig megtartod.

2013. márc. 28. 11:51
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:

Köszönöm! Azt hiszem, a hívási fám nem gáz, szinten felül nem hívok. A kuszaságtól tartottam, hogy az nem menő. :)


A paraméterek ellenben olyan sokan lennének, hogy még átláthatatlanabbá tenné az egészet. Persze lehet, hogy egy ügyes névkonvenció is sokat segít az átláthatóságon.

2013. márc. 28. 12:02
 5/6 Srapnel ***** válasza:

Extrém esetben megtervezheted OOPs elven a rendszeredet (mintha OOP-t támogató nyelved lenne), majd ilyen-olyan trükkökkel, a megfelelő mélységig implementálod az OOP-nek egyes részeit.


A legfontosabb az, hogy egyrészt a programod által megvalósított környezet, a programod funkcionalitása és a programod önmaga jól modellezett legyen. Mert ez lesz a rendezőelv alapja. Jelen esetben a programod (meta)modellje nem lehet OOPs, de ez nem akadályozhat meg abban, hogy OOPs-en gondolkodj, már ha a program funkcionaliása maga jól kezelhető OOP-vel. Ha ez megvan, akkor csoportosíthatod, elnevezheted, néhol akár kódolhatod a program elemeit úgy is, hogy az OOP egyes elemeit utánozza.


Pl. az OOP-s rendszerekben a metódusokat elképzelheted úgy is (és így is történik!), hogy azok olyan függvények, melyek megkapják az aktuális objektum referenciáját is argumentumként.


Pl. ha van nekem egy síkidom koncepcióm a rendszerben, de a nyelv nem OOP-s, még mindig csinálhatok egy Síkidom_kirajzol nevű, visszatérési érték nélküli és a Síkidom adatait tartalmazó struktúra (vagy tömb) referenciáját argumentumként kapó függvényt, ami így a Síkidom osztály kirajzol metódusának felel meg.


A síkidomok függvényeit aztán egymás közelébe/mellé kell rakni, hogy egy helyen legyenek.


Ha olyan nyelved van, amelyben nincs referencia szerinti átadás, akkor is megteheted ezt, bár nehezebben: a függvényt úgy definiálod, hogy a bemeneti struktúra típusának megfelelő típusú a visszatérési érték és a módosított struktúrát adja vissza a metódus, majd ahol hívod, ott egy struktúra értékadás jobb oldalán lesz a hívás. Ha így még nem érthető, akkor szólj, részletezem.


A globális változókat is csoportokra oszthatod, a program működésétől függően. Lehet egy csoport az "objektumok" struktúráinak változói, gyakori csoport az átmeneti, temporális változók, mint pl. ciklusszámlálók csoportja. De lehetnek általános, "util" metódusoknak is saját változói, vagy azok között megosztott változók. Ezt a saját esetedben kell elemezni és mintát, szabályszerűségeket találni a kódodban, amelyre alapozhatod az összevonásokat. Mert természetesen mindenhez kreálhatsz külön globális változót is (ha van memória, tedd azt!).

2013. márc. 30. 07:55
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Köszönöm szépen a részletes, segítőkész válaszokat! (Y)
2013. ápr. 29. 12:15

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!