ugrás a tartalomhoz

Akkor most jó az OOP vagy sem?

Mistic97 · 2015. Júl. 20. (H), 00.30
Arra lennék kíváncsi, hogy az objektum orientált programozás hasznos-e vagy sem? A wikipédiát olvastam, és az enciklopédia végén egy csomó nevet felsorol, akik szerint az OOP inkább ront, mint javít. Wiki link: https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s

Ti hogy vagytok vele? Én még kezdő programozó vagyok.

Elnézést, ha rossz témába írok, a fórumon is új vagyok... :)
 
1

Akkor most jó a nukleáris

inf · 2015. Júl. 20. (H), 01.24
Akkor most jó a nukleáris energia vagy sem? Wikipédián annyi rossz dolgot olvastam az atomhulladékokról, és az enciklopédia végén egy csomó nevet felsorol, akik szerint az atomenergia inkább ront, mint javít a környezetvédelem helyzetén, nem beszélve a hidrogén bombáról. Ti hogy vagytok vele?
2

Atom

Hidvégi Gábor · 2015. Júl. 20. (H), 07.15
Jó a példád, tipikus absztrakció : )

A kiégett fűtőelemekből még nagyjából tízezer évig lehet atombombát készíteni, ezért ennyi ideig biztosítani kell az őrzésüket. Az absztrakció pedig az, hogy most abból indulunk ki, hogy a jelenlegi nemzetek ennyi ideig fennmaradnak, és képesek lesznek elvégezni ezt a feladatot.
10

Én inkább arra gondoltam,

inf · 2015. Júl. 20. (H), 13.32
Én inkább arra gondoltam, hogy a technológia alapvetően semleges, és az, hogy jó vagy rossz attól függ, hogy hogyan használják.
3

Wikipedia

castaw · 2015. Júl. 20. (H), 07.50
https://www.youtube.com/watch?v=kFBDn5PiL00

...mindig ez ugrik be, és mennyire igaz. :)
4

Disszonancia

Hidvégi Gábor · 2015. Júl. 20. (H), 08.33
8

Magadra vetted, pedig csak a

castaw · 2015. Júl. 20. (H), 11.50
Magadra vetted, pedig csak a Wikipediara utaltam.
9

Nem vettem magamra

Hidvégi Gábor · 2015. Júl. 20. (H), 12.10
Miért linkelted be a videót?
14

Alap. :D Arra viszont jó,

inf · 2015. Júl. 20. (H), 22.35
Alap. :D Arra viszont jó, hogy egy számodra ismeretlen témakörben gyorsan megtalálod a kulcsszavakat, ami google-ben sokszor nehezen megy.
5

Kedves Mistic97! Ha a

tisch.david · 2015. Júl. 20. (H), 08.39
Kedves Mistic97!

Ha a kérdésed arra vonatkozik, hogy megtanuld-e az OOP eszközkészletét használni egy adott nyelven vagy, hogy - adott esetben - használd-e ezt az eszközkészletet, akkor a válaszom igen. Ha objektumokkal kell dolgoznod, akkor azt ma is az OOP irányelvei szerint érdemes megtenni.

Üdv:

Dávid
6

Gábor, te regisztráltál új

bamegakapa · 2015. Júl. 20. (H), 09.56
Gábor, te regisztráltál új júzert, hogy feltehesd ezt a kérdést? :)
7

Nem

Hidvégi Gábor · 2015. Júl. 20. (H), 11.11
Nincs ilyenre szükség, én vállalom a nevem és a gondolataimat.
12

Nem értem, hogy jön ez ide.

bamegakapa · 2015. Júl. 20. (H), 18.42
Nem értem, hogy jön ez ide. Sokan vállalják a nevüket meg a gondolataikat, aztán bár ne tennék :).
13

Ha azt tenném, amit

Hidvégi Gábor · 2015. Júl. 20. (H), 21.38
Ha azt tenném, amit feltételeztél, az ellenkezne az elveimmel. Egyébként sem lenne értelme.
15

Amúgy vicc volt, egyedül is

bamegakapa · 2015. Júl. 20. (H), 23.41
Amúgy vicc volt, egyedül is teletolsz minden témát, nem kellenek neked társak :).

Az elves cucc azért jó duma.
11

Nem teljesen értek egyet a

smokey · 2015. Júl. 20. (H), 15.25
Nem teljesen értek egyet a wiki-s cikk végén felsorolt kritikákkal; viszont a cikkel sem értek egyet, hiányolom azt a listát, amiben azon emberek gondolatait sorolja fel, akik szerint az OOP jobb.

A véleményem az, hogy minden technológiával lehet nagyon jót és nagyon rosszat is fejleszteni. A funkcionális programozás sem abból kellene hogy álljon, hogy van sok függvény, struktúra, stb amit spagetti szerűen használunk, így az OO sem abból áll, hogy van ilyen-olyan osztály, amit jobbra-balra példányosítunk és hívogatjuk a metódusait.

Ha alaposan megtanulod az OOP-t és használsz tervezési mintákat, megtanulod struktúrálni az osztályokat, stb. akkor nagyban megkönnyíted a saját munkádat és akár más munkáját is. Szerintem a kód újrahasznosítás is nagyon egyszerű és triviális az OO keretein belül. Nem mellesleg szerintem tesztelni is egyszerűbb. Performancia szemszögéből szerintem nem az OO a nyertes, viszont ad egy szemléletet, amivel gyorsan tudsz tervezni, és fejleszteni is.

Sokan elvetik az UML-t is, mint tervezési technológiát, mert bonyolult, meg sok, meg ágyúval verébre, stb indokokkal.. Az UML-t mint lehetőséget egy ajánlásnak tartom, aminek adott project esetén érdemes bizonyos erősségeit kihasználni, de semmikép nem minden lehetőségét. Ha UML alapokon tervezel meg valamit, akkor sokkal egyszerűbb objektum-, illetve adatbázis struktúrát kialakítani OOP-ben mint pl egy funkcionális alapokra helyezett technológiában.

+ Nem mindegy milyen célra használod. Egy üzleti alkalmazásnak csak OO-val állnék neki; egy grafikai, matematikai, és hasonló jellegű alkalmazásnak már biztos hogy nem.

Kicsit elkanyarodtam, de egy szónak is száz a vége, szerintem hasznos. Ha megtanultál stabilan programozni pl Pascal-ban, vagy C-ben, akkor érdemes foglalkozni az OO-val. Szerintem elég jó dolog.
16

Huu, hát köszönöm a sok

Mistic97 · 2015. Júl. 20. (H), 23.47
Huu, hát köszönöm a sok érdekes hozzászólást! :)

Több dolog is eszembe jutott, amit itt leírtatok, szerintem egyedül ott hibáztam, hogy nem olvastam tovább. Hát bocsánat, kicsit késő volt, de érdekelt néhány kérdésre a válasz. :)

Köszönöm a segítséget! Jelenleg JavaScript parancsnyelvben(!!!!) foglalkozom az objektumokkal, de elsőre furcsának tűnik a nyelv. Már maga a DOM furcsa volt számomra, hogy mégis hogyan lehet egy programnyelvet objektumokra alapozni??? o.O Most, hogy így olvasom a véleményeteket, már én is belátom, hogy egy nyelv nem használható akármire, ahogy az OOP sem.

Köszönöm a válaszokat!
17

Nem szeretném megtörni a

smokey · 2015. Júl. 21. (K), 08.12
Nem szeretném megtörni a lelkesedésed, ezt csak jó tanácsként és tapasztalatból mondom: a JavaScript egy tök jó nyelv, viszont a klasszikus OO elméletet ne JavaScript nyelven tanuld meg.

Az OO-ban rengeteg az olyan kulcsszó, amik használata más (főként) erősen típusos nyelvekben triviális, viszont JS-ben nem. Ilyenekre gondolok, hogy public, protected, private, abstract, static, type, void, exception, extend, base, cast-olás, és még sorolhatnám.

Én azt tanácsolom, hogy jobban jársz, stabilabb lesz az OO tudásod, ha c#-ban, vagy (talán jobb, ha) Java-ban tanulod meg az OO alapokat. Ezekben a nyelvekben ugyanis fordítani kell a kódodat, és a fordító szól ha valamit elrontottál. Eleinte nehézkes, de hatalmas segítség.

JavaScript-ben is meg tudsz valósítani mindent, viszont kicsit nyakatekerten, és nem lesz minden annyira egyértelmű, mint mondjuk egy C# vagy Java kódban.

Ha már egyszer és tényleg csak kíváncsiságból: Miért a JavaScriptet választottad?
20

Nem törted meg a

Mistic97 · 2015. Júl. 21. (K), 11.45
Nem törted meg a lelkesedésem, viszont van egy nagy előnyöm. Én Java és PHP nyelveken már programoztam objektumokkal, igaz suliban a legbénább példákkal. Amikor a JavaScriptet már elkezdtem tanulni, tudtam mi az objektum, ismertem, mint a tenyeremet, ezért volt nehéz átállni kicsit.

A JavaScriptet pedig azért választottam, mert jelenleg nagyobb hasznot tudok húzni belőle, gyorsabban és jobban. Gondolok itt arra, hogy egy olyan projekten dolgozom, amit később versenyeken mutatnék be, és ott meg fontos a vizuális látványosság, a közönség ámítására (persze van ott már nekem több 1000 sor). Nos a JavaScript erre tökéletes, elsősorban azért mert értelmezett nyelv, a projektet később úgy is netre lőném (mást nem androidon). Ami még fontos, hogy a HTML, CSS-el könnyű felületet készíteni a programnak (akár mobilra is, habár igen, jobb lenne egy applikáció, de ezt még később).

Most belém köthetnél, hogy akkor miért nem Java vagy egy másik vizuális nyelv. Erre csak annyi a válaszom, hogy nem akartam túl nagy fába vágni a fejszémet, kezdő vagyok. A JS pedig egy nagyon egyszerű parancsnyelv.

És köszönöm a hasznos válaszod! :)
22

Így már értem :). Amúgy a JS

smokey · 2015. Júl. 21. (K), 11.55
Így már értem :). Amúgy a JS erre (is) való. Érdemes, sőt kell is vele foglalkozni, ha ilyen jellegű céljaid vannak. JS-ben létezik olyan, hogy prototype, nézd meg hogy ez pontosan mire való, és hogyan kell használni (ha eddig nem találkoztál vele).

Érdemes egyébként JS keretrendszereket is kitanulni, mint pl: JQuery, ami inkább a csilli-villi megjelenésben segít; AngularJS, ami pl egy böngésző alapú, API vezérelt alkalmazás felépítésében segít.

Hogy ki ne felejtsem (habár ez nem teljesen JS), de a Bootstrap-et is nézed meg, ha még nem ismered!
28

Igen a jQuery-t ismerem és

Mistic97 · 2015. Júl. 21. (K), 16.43
Igen a jQuery-t ismerem és egy elég jó keretrendszer, imádom használni. :)

Utánanéztem a prototypenak is. Ez gyakorlatilag objektumok létrehozása JavaScriptben nem?
function objektum(){
this.tulajdonsag_neve = ertek;
this.metodus_neve = metodus_neve;

function metodus_neve(){
//kod
}
}
Egyedül ezt nem értem: Every JavaScript object has a prototype. The prototype is also an object.
All JavaScript objects inherit their properties and methods from their prototype.

Most ez így jönne ki? Minden JavaScript objektum egy "prototype". A "protototype" is egy objektum.
Minden JS objektum örökli a tulajdonságait és metódusait az ő saját "prototype"-jétől.
Most ez mit takar valójában?
30

Ajánlom figyelmedbe korábbi

Poetro · 2015. Júl. 21. (K), 18.43
Ajánlom figyelmedbe korábbi cikkemet.
32

köszönöm!

Mistic97 · 2015. Júl. 21. (K), 22.52
köszönöm!
31

Kukacoskodás, de a jQuery-re

bamegakapa · 2015. Júl. 21. (K), 21.06
Kukacoskodás, de a jQuery-re nem mondanám, hogy keretrendszer. Inkább egy függvénykönyvtár, ami megkönnyíti a DOM kezelését (plusz AJAX, animációk, stb. - akkor még biztos jó ötletnek tűnt ilyen monumentálissá tenni). Keretet nem ad a programodnak, csak bővíti az eszköztárat.
33

Valóban, én is úgy tudom,

Mistic97 · 2015. Júl. 21. (K), 22.54
Valóban, én is úgy tudom, hogy inkább függvénykönyvtár, de minden esetre szép számban találhatóak hozzá már előre elkészített pluginok. Jó kis kiegészítő az eszköztárba. :)
26

Ha animációkkal akarsz

inf · 2015. Júl. 21. (K), 16.21
Ha animációkkal akarsz foglalkozni, akkor néz körül svg és canvas terén is, nem csak a dom létezik. Nézd meg d3-at is, bár az inkább adat ábrázolásról szól.
29

Köszönöm a jó tanácsokat! :)

Mistic97 · 2015. Júl. 21. (K), 16.48
Köszönöm a jó tanácsokat! :)
18

Én úgy mondanám, hogy az OOP

kuka · 2015. Júl. 21. (K), 11.04
Én úgy mondanám, hogy az OOP akkor jó, ha OOP stílusban használod. Jelenleg egy olyan projekten dolgozok amely tele van ilyenekkel:

$kaposztaleves = $this->kaposzta_leves->megfoz();

$this->kaposzta_leves->feltalal($kaposztaleves);
Ahol $kaposztaleves egy tömb. Ezek után hol a haszna, hogy a KaposztaLeves osztály kibővíti a Leves osztályt?

Na például ennél az ál-OOP-nél határozottan jobb az öreg procedurális programozás.
19

Akkor nem teljesen látod

smokey · 2015. Júl. 21. (K), 11.37
Akkor nem teljesen látod át.

Azt tudod, hogy egy "Leves"-t meg kell főznöd, és tálalnod kell. Tegyük fel, hogy nem tudod, hogy hogyan főzöd meg, viszont azt tudod, hogy egy levest hogyan tálalsz,


//Abstract, mert valamilyen leves
abstract class Leves {

    public function __construct() {

    }

    //A gyerek osztályban kiderül, hogyan készül a leves
    //Itt csak annyi az info, hogy meg kell főzni, de nem tudjuk, hogy hogyan,
    //Mert ez levesenként eltér
    public abstract function megfoz();

    public function feltalal() {
        //Kell egy teríték
        $teritek = new Teritek();
        //Előveszed a kanalat
        $kanal = new EvoKanal();
        //Előveszed a mélytányért
        $tanyer = $new MelyTanyer();
        //A tányérba kitöltöd a levest
        $tanyer->tolt($this);
        //A terítékhez adod a kanalat, jobb oldalra
        $teritek->setKanal($kanal, 'jobbra');
        //A teríték része a tányér is, így hozzáadod a terítékhez a tányért
        $teritek->setTanyer($tanyer);

        return $teritek;
    }
}

class KaposztaLeves extends Leves {

    public function __construct() {
        parent::__construct();
    }

    public function megfoz() {
        //A megfőzés folyamata;
    }

}

class KrumpliLeves extends Leves {

    public function __construct() {
        parent::__construct();
    }

    public function megfoz() {
        //A megfőzés folyamata másképp;
    }

}

//Krumplileves elkészítése
$krumpliLeves = new KrumpliLeves();
$krumpliLeves->megfoz();
$teritek = $krumpliLeves->feltalal(); //Teríték krumplilevessel

//Káposztaleves elkészítése
$kaposztaLeves = new KaposztaLeves();
$kaposztaLeves->megfoz();
$teritek = $kaposztaLeves->feltalal(); //Teríték káposztalevessel

//Újra hasznosítottunk egy csomó kódot, 
//és specializáltuk a különféle levesek főzési módját

21

Csak felületesen futottam át

szjanihu · 2015. Júl. 21. (K), 11.54
Csak felületesen futottam át a topicot, de megakadt ezen a szemem. Ha a leves objektum már létezik, akkor az kész van, nincs mit főzni rajta. A feltalal() meg még rosszabb, egy leves ne tudja már magáról, hogy kell feltálalni.
23

Egyet értek, ez akár lehet

smokey · 2015. Júl. 21. (K), 12.08
Egyet értek, ez akár lehet nézőpont kérdése is. Én most csak a példa kedvéért írtam ezt.

Viszont attól, hogy egy KaposztaLeves osztályból létezik egy példány, attól az még nem biztos, hogy készen van. A konstruktorban is meglehetett volna hívni a megfoz() metódust, vagy csinálni akármit, viszont a példányosítással nem biztos hogy elkészült minden.

Egyébként erre szerettem volna reagálni:

Ezek után hol a haszna, hogy a KaposztaLeves osztály kibővíti a Leves osztályt
24

Az általad írt kódnak közel

kuka · 2015. Júl. 21. (K), 12.13
Az általad írt kódnak közel semmi köze ahhoz a szennyhez amin dolgozok. A te kódod valóban OOP. A miénk esetében ez kétséges. Ha megfigyeled a példámat, nálunk a megfőzött káposztaleves egy moslékos vályúban van tárolva. Amikor tálalásra kerül a sor, előbb ráborítjuk a fazekat amiben főztük a vályúra, majd alóla tálaljuk.

A mondanivalóm az volt, hogy a Wikipédia szócikkben felsorolt kritikák esetében meg kellene vizsgálni, hogy miféle kód kapcsán lettek azok megfogalmazva.
25

Most hogy így szemlélteted,

smokey · 2015. Júl. 21. (K), 12.21
Most hogy így szemlélteted, már értem a lényeget :D bocs a félreértésért.
27

Ezen jót mosolyogtam, hogy

inf · 2015. Júl. 21. (K), 16.23
Ezen jót mosolyogtam, hogy kukának magyarázod az OOP alapjait. :D
34

munkaerőpiac

_subi_ · 2015. Júl. 23. (Cs), 08.21
Mit gondolsz, a munkaerőpiacon történő érvényesülésedet, miképpen befolyásolja az OOP ismerete vagy éppen annak a hiánya? Ha erre a kérdésre válaszolsz magadnak, már nem is annyira kérdés, hogy "jó" vagy "rossz".