Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?

[es] :: Art of Programming :: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?

Strane: 1 2 3 4

[ Pregleda: 19760 | Odgovora: 63 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p6-102.BVCOM.NET.



+1064 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 01:59 - pre 188 meseci
Pazi u pure f-nalnom jeziku uopste ne mozes da razmisljas
u smislu uml dijagrama ;)

Sve f-je sa sajd efektima i imperativnim kodom morao bi da zavrapujes u monadu
tj prljavi deo koda ;) A kad uletis u monadu to se vuce jedno za drugo kao
lepak pa da bi pozvao te f-je iz neke ciste, moras da zoves unsafePerformIO ;)
Naravno, jedino hibridi kao sto su sml, ocaml i f# (e da tu je i scala) mogu imati uspeha zato sto smo
svi navikli da razmisljamo u smislu varijabli i imperativnog koda ;)
No haskell je pure, ali i prilicno tezak, mislim da je daleko komplikovaniji
od c++-a. Heh pazi tu uopste nemas petlji, tj petlje implementiras preko rekurzije tako sto radis
rekurzivni prolaz kroz listu gde bi vrednost brojaca bili elementi liste ;)
No pazi kad u haskellu mozes da imas prave pointere da pokujes po memoriji
i da formiras c nizove pa i da direktno c tebe zove ili ti direktno da zoves
C bez hakova kao sto je JNI. Mnogo je mocniji od jave.
E da u oop-u sve je objekt u f-ionalnom sve je f-ja ;)

Sto se tice navedene f-je nisam mislio sta je lepse sta nije,
nego bre onemoguciti slobodne f-je pa moras main da stavljas kao static
metodu klase na to sam mislio ;) Mislim ok oop ali brate onemoguciti
free f-je to mi se ne svidja.

Pozdrav!
 
Odgovor na temu

fresh.bm

Član broj: 162156
Poruke: 182
*.broadband.blic.net.



+1 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 08:55 - pre 188 meseci
Paralelno programiranje?

http://msdn.microsoft.com/en-us/magazine/cc872852.aspx
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 09:29 - pre 188 meseci
Paralelno programiranje je ql, ali ima jos da se nacekamo za to bar sto se MSa i .NET/VC-a tice, mada C#4/VS2010 je tu iza coska
Iskreno ne znam dal ce to uopste biti zasebna paradigma (onda bi morali da kazemo i da su LINQ, WPF, MFC, itd paradigme). Efektivno ti vec sada mozes da radis paralelno programiranje samo uz malo vise koda, morao bi sam rucno da odradis parcijalizaciju podataka i iniciranje posebnih threadova koji ce da obradjuju parcijalni set. Vec sada ima nekih implementacija PP-a mada nisam isprobavao jer mi je sve to zigledalo previse experimentalno za instaliranje na devbox, pa ne mogu da pricam.

Ono ste ce "zvanicno" paralelno programiranje doneti u C#4 je cisto supported biblioteka tog koda uz neke izmene lambda sistema jezika da se dalje pojednostave paralelni izrazi (bar u slucaju C#-a). Generalno odlicna ideja ako mene pitas, ali daleko od paradigme (da ne pominjem da sve to i dalje radi pod OOPom ). Mene najvise samo brine sto ce buduci bagovi biti monstruozni, jedino sto nas je do sada spasavalo od sampiona u multithreadingu je to sto multithreading nije bio jednostavan pa sampioni cesto nisu mogli ni da pokrenu thread, sa PP podrskom i mogucnoscu da raspale milion threadova jednim izrazom, sampioni ce dobiti novu dimenziju postojanja.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2789 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 11:05 - pre 188 meseci
Citat:
mmix: Slika govori hiljadu reci
Ovaj dijagram je u 1:1 vezi sa OOP strukturom programa sorsom i sasvim je ocigledno sta modeluje. Sama implementacija metoda moze biti strukturalna, kompozitna, funkcionalna, u C#-u, cobolu ili ruby-u, biraj, ali OOP je taj koji definise shemu entitea, procesa i asocijacija sto strukturalno programiranje ne moze samo po sebi.


OK, UML dijagrami. Znam ja sta ti hoces da kazes, ali moze se to gledati i sa druge strane. Opisao si strukture podataka, interfejse i veze izmedju struktura, a da nisi napisao ni liniju koda. Ja ipak mislim da se sve to moze prestaviti kroz kod, ali ces ti reci da to nije to, jer ukljucuje implementaciju, a iz UML-a je mozes ispaljivati Java, C++, C# kod itd.

Ja prednosti OOP-a sagledavam drugacije: Nasledjivanje olaksava ponovnu upotrebu koda, enkapsulacija olaksava trazenje gresaka (jer znamo gde u programu neka promenljiva moze biti menjana), polimorfizam ne treba ni komentarisati itd.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 12:48 - pre 188 meseci
Citat:
Nedeljko: OK, UML dijagrami. Znam ja sta ti hoces da kazes, ali moze se to gledati i sa druge strane. Opisao si strukture podataka, interfejse i veze izmedju struktura, a da nisi napisao ni liniju koda. Ja ipak mislim da se sve to moze prestaviti kroz kod, ali ces ti reci da to nije to, jer ukljucuje implementaciju, a iz UML-a je mozes ispaljivati Java, C++, C# kod itd.


E sad da ti otkrijem istinu, nisam nacrtao ovaj dijagram, napisao sam C# kod i pustio VS da mi izgenerise class diagram (i malo ga doradio da se asocijacije vide direktno), dok sam sors nema nikakve implementacione detalje i sastoji se cisto od sheme. Sta vise sors (okacen kao att da ne pravim guzvu) mi zapravo otkriva jos neke non-UML implementacione detalje koje dijragram nema (npr da je Rad() virtuelni metod, a da OdradiPosao() nije). Svako ko se bavi OOP-om u bilo kom programskom jeziku (doduse imperativnom) razumece sta sors modeluje i sta vise znace kako da ga adaptira za svoj OOP jezik. Kad bi sve operacije odavde odradio zaobisavsi OOP u potpunosti, veoma bi bilo diskutabilno sta bi od ovog modela bilo jasno i nedvosmisleno.

Citat:
Branimir Maksimovic: Sve f-je sa sajd efektima i imperativnim kodom morao bi da zavrapujes u monadu tj prljavi deo koda A kad uletis u monadu to se vuce jedno za drugo kao
lepak pa da bi pozvao te f-je iz neke ciste, ...., ......, ......, E da u oop-u sve je objekt u f-ionalnom sve je f-ja


Ok, prodao si mi ideju, kupljen sam. Ajd sad sa mnom kod mog klijenta bankara (inteligentan cova ali nije programer) i da mu objasnis da je taj funkcionalni blob hijeroglifa koje se rekurzivno lepe jedan za drugog u stvari model njegovog buduceg motora za procesiranje kamata u loan-processing sistemu. Uz jedan uslov, zabranjeno je na njegova pitanja odgovarati sa "pa kako ne vidis to!". Ne-programeri vole dijagrame, veoma. Nazalost za sve ljubitelje ekperimentalnih jezika, da bi nesto postalo mainstream biznis mora da prihvati koncept da bi taj koncept bio adekvatno finansiran.

Citat:
Branimir Maksimovic: nego bre onemoguciti slobodne f-je pa moras main da stavljas kao static metodu klase na to sam mislio Mislim ok oop ali brate onemoguciti free f-je to mi se ne svidja.

Nema niceg loseg u statickim elementima, sta vise oni su kljucni za implementaciju nekih mehanizama i paterna (kao sto je npr singleton), naravno ne treba preterivati jer ako su ti sve metode staticke onda nisi daleko otisao od imperativnog. Sta bi konkretno dobio time sto bi Main morao da bude instance metod? Samo to da inicijalizacija aplikacije mora jos i da instancira klasu u kojoj je Main i da na stek odvuce i instancu pri pozivu.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
Prikačeni fajlovi
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 871
*.teol.net.



+148 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 13:47 - pre 188 meseci
@fresh.bm: Vidim da si pažljivo slušao profesora PJ1 prošle subote na ETFu. :)

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2789 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 14:07 - pre 188 meseci
@mmix

Nisam se najbolje izrazio, a mislio sam na sledece:

Kada prodajes svoju aplikaciju, korsnika ne interesuju ni programski jezici ni paradigme. Njega zanimaju samo dve stvari: funkcionalnost (u koju ubrajam i izgled i UI itd.) i cena. Sve sto se moze uraditi u jednoj paradigmi moze i u bilo kojoj drugoj, a isto vazi i za jezike. E, sad, cemu onda razne paradigme i razni jezici? Pa, zato sto je konkretan posao lakse uraditi na jedan nacin nego na drugi, zato sto se jedan kod lakse ponovo koristi nego drugi i zato sto se jedan kod lakse odrzava od drugog, sto utice i na broj gresaka (funkcionalnost) i na cenu, a to korisnika zapravo zanima.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-186.BVCOM.NET.



+1064 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?13.10.2008. u 18:18 - pre 188 meseci
Citat:

Ok, prodao si mi ideju, kupljen sam. Ajd sad sa mnom kod mog klijenta bankara (inteligentan cova ali nije programer) i da mu objasnis da je taj funkcionalni blob hijeroglifa koje se rekurzivno lepe jedan za drugog u stvari model njegovog buduceg motora za procesiranje kamata u loan-processing sistemu. Uz jedan uslov, zabranjeno je na njegova pitanja odgovarati sa "pa kako ne vidis to!". Ne-programeri vole dijagrame, veoma. Nazalost za sve ljubitelje ekperimentalnih jezika, da bi nesto postalo mainstream biznis mora da prihvati koncept da bi taj koncept bio adekvatno finansiran.


Mislim da kod bankara vise ide na to koja se baza koristi nego koji jezik. U tom smislu osim ako
ne koristis oo bazu uml dijagrami mu nece nista znaciti ;)
Sto se tice eksperimentalnih jezika, pa f-onalno programiranje postoji odavno i polako
postaje main stream. Svi ovi hibridni OO jezici polako uvode elemente f-onalnog programiranja.
Recimo iznenadio bi se koliko je genericko programiranje pokupilo iz te paradigme.
Da ne govorim o closure-ima i lambda f-jama.
Pa evo mikrosoftov f# koji se nedavno pojavio, je indikator.

Citat:

Nema niceg loseg u statickim elementima, sta vise oni su kljucni za implementaciju nekih mehanizama i paterna (kao sto je npr singleton), naravno ne treba preterivati jer ako su ti sve metode staticke onda nisi daleko otisao od imperativnog. Sta bi konkretno dobio time sto bi Main morao da bude instance metod? Samo to da inicijalizacija aplikacije mora jos i da instancira klasu u kojoj je Main i da na stek odvuce i


Nisam na to mislio. Kao sto vidis nelogicnost da main bude member f-ja tako ja vidim nelogicnost
da main bude static member f-ja. Mislim cemu praviti takvu klasu ;)
Drugo imas f-je kao sto je recimo racunanje hash-a stringa ili neke operacije
koje radis na vise objekata razlicitih klasa koje se logicki ne mogu pridruziti ni jednoj
klasi a ipak moras zato sto nemas izbora. To je po meni forsirani dizajn error.
U principu java klase koristi i kao namespace za f-je i kao strukture podataka sto je po meni
greska. C++ je to ispravno odradio.
E cek sta podrzumevas pod imperativnim kodom.
Pazi programiranje se deli na imperativno i f-onalno.
Imperativni kod ti je niz izraza koji se izvrsava sekvencijalno u programu.
F-onalni kod se sastoji iz samo jedne linije gde se imperativni kod simulira
tako sto se ide kroz listu f-ja.
Dakle
int i = 5;
i = i +1;
je imperativni kod i to ne postoji u cistom f-nalnom jeziku.
Takodje nemas ni tzv destruktivne update tj operaciju dodeljivanja vrednosti,
a naravno ni petlje jer su i one imperativni kod i podrazumevaju destruktivni update ;)

Pozdrav!
 
Odgovor na temu

MC_

Član broj: 63352
Poruke: 82
*.dynamic.sbb.rs.



Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?14.10.2008. u 15:02 - pre 188 meseci
Osnovni nedostatak OO metodologije jeste upravo njena strukturna usmerenost. Sve ide dobro dok se radi o skolskim primerima. U realnosti veze izmedju objekata stvaraju enormnu kompleksnost. ZaN objekata,brojmogucih veza je N!/2.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 10:44 - pre 188 meseci
Eve me na dialupu

@MC: Tu si u pravu, ali koje resenje ti predlazes? Ako treba da imas povezanost, onda treba da imas povezanost, ne vidim zasto je to negativna strana OOPa? To je kao reci da ne treba praviti zgrade zato sto su komplikovane i da umesto toga treba da se prave samo jednosobne barake. Upravo ta kompleksnost je dobra jer omogucava kompleksne modele i resavanje kompleksnih problema.


@branislav: Sad cu ti dati konkretan razlog zasto static metode, bar sto se tice .NETa (prica je sigurno slicna i za Javu). U C++ je bilo OK imati free f-je zato sto je metadata klasi i funkcija setan preko include fajlova sto je ukinuto u CLI-u; metadata se sad setao kroz sam kompajliran asembli sto je olaksavalo reuse, medjutim nesto se moralo zrtvovati. Izmedju ostalog to je bio format metadata bloka. Metadata klasa nije samo "oklop" za propertije i metode, on takodje nosi code-security informacije, atribute, JIT hintove, itd i reseno je da free funkcije nece biti deo metadata opisa jer bi to zahtevalo promenu type sistema CLI-a (svaka f-je bi morala da postane poseban CLI tip) bez realne potrebe. To je prvi razlog.
Drugi razlog je ambiguity. Vec sada u vecim C++ projektima sigurno povremeno nailazis na situacije da se u dve biblioteke koje moras da koristis nalaze dve funkcije sa identicnim imenom i vrlo verovatno istim potpisom (narocito ako nema parametara), i to resavas sa namespace-ovima. Ako onda pogledas, to vise nije free f-ja, ona je deo namespace-a i cak se i poziva u istoj formi kao staticka metoda U .NETu su staticke metode deo klase i nije problem ako se zovu isto posto se pozivaju preko imena klase (sto i dalje nije namespace, mozes imati i dva razlicita namespace-a sa istom klasom i istim metodoma za sledeci nivo resavanja).
Mislim da se secam i neke spike o tome da je i jedan od razloga bio i GC, tj da bi ostavljanje free f-ja dodatno usporilo GC proces, ali ne secam se detalja bas, ako iskopam na netu ponovo okacicu.

I i nije mi jasno ovo "U principu java klase koristi i kao namespace za f-je i kao strukture podataka sto je po meni greska. C++ je to ispravno odradio"? Klasa nije namespace za f-je u Javi, a nije ni samo struktura podataka. i zasto bi C++ implementacija bila bolja? Subjektivno zastupas C++ iako kad pogledas objektivno sa funkcionalne strane i generisanog native code-a ne postoji razlika izmedju poziva free f-je i statickog metoda klase.

A to da se programiranje deli na imerativno i funkcionalno E da si ziv i zdrav, pogledaj samo spisak ovde pri dnu strane, a sigurno ih ima jos pride, moraju masteri u CSu na necemu da zarade PhD, gde bolji nacin nego izmisliti neku paradigmu . Neki su zanimljivi, neki dosadni, itd, itd, ali malo njih je mainstream. Pure functional je inace deo deklarativne paradigme, ciji proizvod upravo sada koristis (HTML je deklarativni jezik i mnogo je vise rasprostranjen nego bilo koji OOP, imerativni ili deklarativni jezik).
A i necu da se ovo pretvori u pissing contest imperative vs functional, tu temu smo vec imali ovde relativno skoro. Ajd da se vratimo na OOP
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

MC_

Član broj: 63352
Poruke: 82
*.dynamic.sbb.rs.



Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 11:17 - pre 188 meseci
@mmimix

ne predlazem nikakvu alternativu OO programiranju. Vise veza stvara dodatnu kompleksnost, imajuci u vidu da se ne radi o prostim vezama vec da svaka od njih poseduje odredjeni kontekst. Stvari se mogu posmatrati i ovako: mali broj objekta predstavlja nisku granulaciju, tj granice i domeni onjekata su lako prepoznatljivi. Mnostvo objekata stvara konfuziju. Tu se postavlja potreba za hierarhijom. Ali hierarhija implicira interface viseg apstrakktnog nivoa.Odredjene funkcije bivaju sakrivene. Smatram da je resenje uvek jednotavniji dizajn.
 
Odgovor na temu

stryder

Član broj: 106739
Poruke: 54
*.ns.ac.yu.



Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 15:37 - pre 188 meseci
A sta mislite o MDA? Ne vidim da je neko to vec gore spomenuo
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-221.bvcom.net.



+1064 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 16:04 - pre 188 meseci
Miljane, sto se tice CLI prica ti ne stoji posto CLI bez problema podrzava free
varijable, konstante, i f-je. Dokaz ti je C++/CLI.
To sto drugi jezici ne podrzavaju tu mogucnost, nije kriv CLI niti C++.

Drugo namespace nije isto sto i klasa zasto sto ti mozes ubaciti f-ju u namespace
iz drugog source file-a. Sintaksa je ista ali semantika potpuno drugacija.
Da, namespace-i su uvedeni da rese problem ambigitija, tacno.
E sad java ima package sto je prakticno isto sto i namespace u c++-u
sa daleko skromnijim mogucnostima,
ali u cemu bi bio problem da ubacis koju free f-ju u javi i to da nazoves package?

Trece to nema nikakve veze sa gc. Mozes imati gc i za C++ bilo CLI bilo obicnu varijantu.
gc je prosto program koji "baby situje" dealokaciju memorije i nema veze
sa kodom, vec sa podacima.

Cetvrto sto se tice f-onalno vs imperativno hteo sam da usaglasimo terminologiju.
Na osnovu ovoga sto si rekao:
Citat:

Nema niceg loseg u statickim elementima, sta vise oni su kljucni za implementaciju nekih mehanizama i paterna (kao sto je npr singleton), naravno ne treba preterivati jer ako su ti sve metode staticke onda nisi daleko otisao od imperativnog.

Vidi se da pod imperativnim programiranjem podrazumevas nesto drugo od uobicajene
definicije, tj nesto zastarelo u osnovu na nesto novo,sto nikako ne stoji, pa sam prosto naveo da se programiranje
deli na f-onalno vs imperativno kako bi razjasnio situaciju. A OO programiranje je u svakom slucaju
imperativno.
E sad dal je f-onalno programiranje i deklarativno i koliko jos deklarativnih stilova postoji,
nije bitno u ovome slucaju, to je samo razvodnjavanje poente.

Pozdrav!


 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-221.bvcom.net.



+1064 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 16:16 - pre 188 meseci
Stryder, sta podrazumevas pod mda prvo to reci?

Pozdrav!
 
Odgovor na temu

bags

Član broj: 10072
Poruke: 715
*.it-austria.net.



+2 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 16:32 - pre 188 meseci
Model-driven architecture

Nedostaci:

1.) Ne postoji dovoljno flexibilan nacin za opisivanje modela (UML je jako daleko od toga)
2.) Generatori koda su isto jos uvjek na niskom standardu

PS:
Mada ja to ne bih ovdje ubacivao kao programersku paradigmu vec vise kao sto i samo ime kaze u arhitekturu i pomocno sredstvo.
Free advice is seldom cheap.
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.dynamic.sbb.rs.



+9 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 17:07 - pre 188 meseci
@mmix
Kao prvo, ako gledamo native kod, onda jeste ista stvar imati statičku metodu u klasi i f-ju u namespace-u, ali je vreme kompajliranja malo duže (čitao sam to negde, okačiću gde...) zato što se dodatno vrši neki type cheking i rešava pitanje padding-a, zato što takvu klasu ipak možeš da instanciraš).

Paketi u Javi na neki način vezuju logičku i fizičku strukturu (čitaj: raspored dir-a na disku. Zbog toga i mislim da su ograničili da može da postoji samo jedna public klasa u paketu) što sa assemblijima u .NETu nije slučaj.

E sada, namespace-ovi su, kao što Branimir reče, "otvoreni" i možeš praviti i aliase tih namespace-ova. (Gde je nešto kao typedef u Javi?)
A i lepo možeš da koristiš "using" (i u nekom drugom namespace-u ili nekoj klasi) i onda će implicitno moći negde da postoje podrazumevani namespace-ovi... Ja se ne sećam da je moguće u Javi bilo gde sem na početku uključiti pakete (ispravite me ako grešim).

Deklaracija statičkih f-ja u klasi (bez ikakvih drugih podataka, dakle samo f-je) je vrlo korisna ako datu klasu koristiš kao Policy klasu, tj. s njom parametrizuješ neki templejt, što sa namespace-om ne bi mogao.

--

Video sam negde da pominješ da su genericsi i templejti slična stvar. Zapravo, oni imaju neku sličnu početnu priču, ali su "ispod žita" dva potpuno različita sveta.

I da, ovo sad čisto onako pitam, ne toliko vezano za celu priču: Da li možeš da uradiš refleksiju nad nekim instanciranim (čiju deklaraciju ne znaš, nije ti dostupna...) generc-om, da sačuvaš info o tome koji je generic u pitanju i da odmah posle toga instanciraš taj generic nekim drugim tipom (parametrom)? Koliko se ja sećam, do neke verzije u Javi su metapodaci o genercs-ima bili siromašni, ako se nisu i gubili skroz.
 
Odgovor na temu

stryder

Član broj: 106739
Poruke: 54
*.ADSL.neobee.net.



Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 18:45 - pre 188 meseci
@Branimir Maksimovic

Kao sto rece bags, mislio sam na Model Driven Architecture koji zastupa Object Management Group. MDA je prilaz razvoju softvera korišćenjem modela. Osim UML-a koristi i Meta Object Facility (MOF) kao i Common Warehouse Metamodel (CWM). MDA podrazumeva razvoj softvera na višem nivou apstrakcije gde se najpre definiše model koji je nezavisan od platforme (Platform Independent Model - PIM). PIM se potom transformiše u Platform Specific Model i odatle se potom generiše kod i vrši se implementacija.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 20:03 - pre 188 meseci
Citat:
Branimir Maksimovic: Miljane, sto se tice CLI prica ti ne stoji posto CLI bez problema podrzava free varijable, konstante, i f-je. Dokaz ti je C++/CLI. To sto drugi jezici ne podrzavaju tu mogucnost, nije kriv CLI niti C++.

Ok, mislim da ovde vrlo lako mozes da mi dokazes da nisam u pravu, napravi mi managed DLL u managed C++ koji ima free funkciju deklarisanu u metadata bloku. Mislim da ces imati problem da tako nesto ostvaris, al ajde, mozda si u pravu a meni je nesto promaklo.

Citat:
Branimir Maksimovic: gc je prosto program koji "baby situje" dealokaciju memorije i nema veze sa kodom, vec sa podacima.

Pa nije bas, i za to razmisljanje su uglavnom krivi MS i Sun svojim populistickim reklamiranjem tehnologije, GC je u oba slucaja malo kompleksnija zivotinja koja veoma invazivno trackuje alociranu memoriju i njihov lifetime ako su objekti. Ti to ne vidis, ali svaki put kad npr lokalna varijable u retail codu izadje iz scope-a (npr vise se ne koristi posle toga), JIT ce generisati kod koji ce o tome obavestiti GC podsistem. I ne mogu da nadjem taj blog/clanak, ubi me ovaj dialup.

Citat:
Branimir Maksimovic:Vidi se da pod imperativnim programiranjem podrazumevas nesto drugo od uobicajene definicije, tj nesto zastarelo u osnovu na nesto novo,sto nikako ne stoji, pa sam prosto naveo da se programiranje deli na f-onalno vs imperativno kako bi razjasnio situaciju. A OO programiranje je u svakom slucaju imperativno.

Ja to nisam rekao, sta vise ja se skoro necu preorijentisati sa imperativnog programiranja (I like my state ) i uopste ga ne smatram zastarelim, ali OOP nije imperativno programiranje, nije ni funkcionalno, to je paradigma za sebe; ako vec treba da ga uokviris negde onda mu je mesto pre pored f-nalnog jer je OOP sam po sebi deklarativan, shema klasa i njihovih veza pre odredjuje "sta", nego kako, a konkretna implementacija klasa u nekom jeziku moze biti preko imperativnog ili funkcionalnog koda (ili nekog treceg) u zavisnosti od toga u cemu radis. Mislim da ti konstantno ovo potenciras zato sto vezujes OOP za jezike a to nije slucaj. Istina jeste da OOP bez state-a nije nesto preterano koristan (al ako cemo tako ja to mislim generalno za funkcionalno programiranje), ali koliko vidim po netu postoji primer funkcionalnog OOP jezika (O'Haskel).

Citat:
Goran Arandjelovic: Kao prvo, ako gledamo native kod, onda jeste ista stvar imati statičku metodu u klasi i f-ju u namespace-u, ali je vreme kompajliranja malo duže (čitao sam to negde, okačiću gde...) zato što se dodatno vrši neki type cheking i rešava pitanje padding-a, zato što takvu klasu ipak možeš da instanciraš)

Samo utoliko sto moras da sacekas JIT ili da istrpis interpeter, typechecking je compile-side (jedan od benefita strongtyped jezika) a implicitni konstruktor je istina prisutan u outputu ali je neaktivan jer tu klasu ne instanciras (bez obzira sto mozes). Kad kod dodje do trenutka da se staticki metod pozove, sve to je nevazno jer se svodi na call bez pushovanja instance pointera na stek (ili u registar) sto je isto kao i poziv free f-je.

Citat:
Goran Arandjelovic:Paketi u Javi na ...... , tj. s njom parametrizuješ neki templejt, što sa namespace-om ne bi mogao.

To sve manje vise stoji, ali ja vec par poruka pokusavam da se izvucem iz off topic rasprave of free funkcijama al neuspesno. Ajd, priznajem poraz, free funkcije su svete i nezaobilazne, ajmo dalje

Citat:
Goran Arandjelovic: Da li možeš da uradiš refleksiju nad nekim instanciranim (čiju deklaraciju ne znaš, nije ti dostupna...) generc-om, da sačuvaš info o tome koji je generic u pitanju i da odmah posle toga instanciraš taj generic nekim drugim tipom (parametrom)? Koliko se ja sećam, do neke verzije u Javi su metapodaci o genercs-ima bili siromašni, ako se nisu i gubili skroz.

ne znam za Javu jer nisam radio nista slicno u Javi, ali u CLR-u mozes, doduse mislim da moras da emitujes novi tip (strong type) pre nego ga instanciras, provericu, ali refleksija nosi pune runtime informacije o genericsima. (Btw, znam da template i generics nisu isto )
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Branimir Maksimovic

Član broj: 64947
Poruke: 5534
c-bg-d-p3-221.BVCOM.NET.



+1064 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?15.10.2008. u 23:52 - pre 188 meseci
Miljane, sto se managed c++ tice, dovoljno je da on postoji ;)
Ne moram da pravim nikakve dll-ove niti mi je to sad jednostavno posto nit
radim u windows-u niti imam instaliran visual studio ali quick search
mi daje sledece:
Citat:

One question that comes up from time to time in the C++ newsgroups is that functions or constants that exist in a C++/CLI class library are not accessible in a C# or VB.NET project.

The reason for this is nearly always that that constants or functions are defined outside of a class scope.

Consider the following - perfectly valid - C++/CLI:

namespace Bla

{

const int CONST = 42;

int func(void)

{

return CONST;

}

};

You can use CONST and func in other C++/CLI code.

What you can’t do is to use those symbols in other .NET languages. The reason is that those languages do not have a concept of things existing outside of a class or struct scope.

In other words, even though the CLR supports it, languages other than C++/CLI do not support free standing functions, variables and constants.


Tako da tvoja tvrdnja ne stoji.

Sto se tice gc-a ne mogu da vidim nikakvu vezu sa free f-jama i gc-om.
Bilo kako da je sam gc uradjen f-ja bilo free bilo ne free je kod i nista drugo.
E sad ako cli generise kod koji notifikuje gc kad god neka f-ja izlazi
opet ne vidim razliku izmedju member i free f-je.
Konceptualno izmedju static member, member i free f-je nema apsolutno
nikakve razlike osim sto se member poziva na drugi nacin i sto ima podrazumevan
prvi parametar.
Inace sama member f-ja se ni po cemu ne mora razlikovati od non member f-je.
Ne znam, sto hoces da kazes sa ovim primerima ali tu nikako ne moze
biti neke razlike u tom smislu.

Citat:

Ja to nisam rekao, sta vise ja se skoro necu preorijentisati sa imperativnog programiranja (I like my state ) i uopste ga ne smatram zastarelim


Kako nisi rekao, sta sam ja onda citirao ;)
Nema veze bre sad je terminologija uskladjena, kad si rekao imperativno verovatno si mislio na proceduralno
. Sto se tice OO i f-onalno, naravno da se sad prave
hibridi. No OO deo price ide u paketu sa imperativnim programiranjem ;) pa tako
u tom o'haskelu nalazis monadic objects, a monade su u haskelu nacin da zavrapujes
imperativni u f-onalni kod ;) E sad sa cistim f-onalnim kodom ne mozes daleko dogurati
posto tu ne mozes imati IO ;) O tome ti pricam i mislim da se tu kapiramo.

Na kraju moram da dam demonstraciju zasto mi je muka od member f-ja
i tog forsiranja da sev ide u klasu.
Prvo citat:
Citat:

In the presence of multiple dispatch, the traditional idea of methods as being defined in classes and contained in objects becomes less appealing--each collide-with method there is attached to two different classes, not one. Hence, the special syntax for method invocation generally disappears, so that method invocation looks exactly like ordinary function invocation, and methods are grouped not in classes but in generic functions.


http://en.wikipedia.org/wiki/Multiple_dispatch

E sad da napravim kranje glup ali ilustrativan primer manjkavosti c++-a i jave.

Code:

//  1. programer pravi interfejs i implementira u klasama D1 i D2
class Base{
public:
virtual int val()const=0;
virtual ~Base(){}
};

class D1:public Base{
public:
int val()const{ return 5; }
};

class D2:public Base{
public:
int val()const{ return 6; }
};

// drugi programer dobija zadatak da napravi cudnu
// f-ju sabiranja dve izvedene klase i integera ali pod uslovom
// da ne sme da dira postojeci kod


// idealan slucaj je da jednostavno definise operacije kako idu
int operator+(D1& l,D1& r)
{
  return l.val() + r.val();
}

int operator+(D2& l,D2& r)
{
  return l.val() - r.val();
}

int operator+(D1& l,D2& r)
{
  return l.val() * r.val();
}

int operator+(D2& l,D1& r)
{
  return l.val() / r.val();
}

int operator+(Base& l ,int r)
{
  return l.val() + r;
}

int operator+(int l, Base& r)
{
  return l - r.val();
}
// medjutim, nazalost sa obzirom da jezici
// kao sto su java i c++ privileguju samo jedan parametar
// i vezuju free f-je za klase, samo gore napisano nije dovoljno.
// u slucaju jave nas programer mora praviti nepotrebnu klasu sa statickim
// metodima u sebi,a u slucaju c++ dovoljno je da
// odradi isto to ali ne mora da pravi nepotrebnu klasu.
// da su OO principi zasnovani na free f-jama umesto metodima ovo
// ispod bi bilo nepotrebno,
// (cast OO jezicima koji su tako uradjeni)
// i zbog toga se  vracamo na proceduralno programiranje
int operator+(Base& l, Base& r)
{
  int rc = l.val()+r.val();
  // ne kastujem u referencu da bih izbegao exception-e
  if(D1* ld1 = dynamic_cast<D1*>(&l))
    if(D1* rd1 = dynamic_cast<D1*>(&r))
      return *ld1 + *rd1;
    else if(D2* rd2 = dynamic_cast<D2*>(&r))
           return *ld1 + *rd2;
         else return rc;
  else if(D2* ld2 = dynamic_cast<D2*>(&l))
         if(D1* rd1 = dynamic_cast<D1*>(&r))
           return *ld2 + *rd1;
         else if(D2* rd2 = dynamic_cast<D2*>(&r))
                return *ld2 + *rd2;
              else return rc;
       else return rc;
}

int main()
{
  D1 a;
  D2 b;
  Base &ba = a, &bb = b;
  int c = ba+bb, d = a+ba; // itd
}
// e kad me nije mrzelo ovo da kucam ;)

Dakle da bi nas programer 2 to odradio elegantno on mora da menja
kompletnu hijerarhiju klasa, tj da dodaje member f-je ili ako vise volite
metode ili message itd i da radi double dispatch.

Code:

//  1. programer pravi interfejs i implementira u klasama D1 i D2
// 2. programer mora da menja interfejs kompletne hijerarhije
// da bi dodao f-onalnost

class D1;
class D2;

class Base{
public:
virtual int val()const=0;
int operator+(int i){ return val()+i; }
virtual int operator+(Base&)=0;
virtual int dispatch(D1&)=0;
virtual int dispatch(D2&)=0;
virtual ~Base(){}
};

// e ovo ne moze u javi ;) prvi parametar ne pripada klasi
// pa mora free f-ja

int operator+(int l, Base& r)
{
  return l - r.val();
}

class D1:public Base{
public:
int val()const{ return 5; }
int operator+(Base& b){ return b.dispatch(*this); }
int operator+(D1& d){ return d.val()+val(); }
int operator+(D2& d);
int dispatch(D1& d){ return val()+d.val(); }
int dispatch(D2& d);
};

class D2:public Base{
public:
int val()const{ return 6; }
int operator+(Base& b){ return b.dispatch(*this); }
int operator+(D1& d){ return d.val()/val(); }
int operator+(D2& d){ return d.val()-val(); }
int dispatch(D1& d){ return val()/d.val(); }
int dispatch(D2& d){ return val() - d.val(); }
};

int D1::operator+(D2& d){ return d.val()*val(); }
int D1::dispatch(D2& d){ return val()*d.val(); }

int main()
{
  D1 a;
  D2 b;
  Base &ba = a, &bb = b;
  int c = ba+bb, d = a+ba; // itd
  int e = a+b;
}


E sad to je dispatch na dva parametra, zamislite sad da treba na tri ;)
E onda ne preostaje nista drugo negao kao u c-u sto se pravi
OO tako da se iz OO pravi OO tj da se formiraju tabele
pointera i da se trazi presek kombinacije ;)

Pozdrav!
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2789 Profil

icon Re: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?16.10.2008. u 09:52 - pre 188 meseci
Ovde jednu funkciju namespace-a niko ne pominje. Sećate se onih neimenovanih prostrora imena, koji vam garantuju da ništa iz njih ne ide u objektni fajl?
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: Art of Programming :: Nedostaci objektno orjenitisane metodologije, i ima li ih uopšte?

Strane: 1 2 3 4

[ Pregleda: 19760 | Odgovora: 63 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.