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

Nasledjivanje samo izmedju interfejsa

[es] :: Art of Programming :: Nasledjivanje samo izmedju interfejsa

Strane: < .. 1 2 3 4

[ Pregleda: 12486 | Odgovora: 72 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.dynamic.isp.telekom.rs.



+171 Profil

icon Re: Nasledjivanje samo izmedju interfejsa20.06.2012. u 22:35 - pre 144 meseci
Nisam mislio da si bukvalno na to mislio, ali kontam te sad na sta ciljas, ali mi nije jasno kako si uspeo takvu paralelu da namestis. Ti na private gledas kao na nesto pozitivno (sto u zavisnosti od konteksta i jeste), jer povecavas "constraint programa", da se tako izrazim, ali bas u tome i jeste problem, u ovom jednom slucaju (C#) ti imas samo jedan nacin, pa bi to bilo kao da kazes "imas izbor da pises ili private ili private" :-)
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Nasledjivanje samo izmedju interfejsa15.07.2012. u 14:15 - pre 143 meseci
U suštini, nalseđivanje samo između interfejsa služi da nametne dependency inversion kao stil programiranja, pa makar to bilo protiv lean principa. Ne znam kako scrum-ovci gledaju na to. Možda je DI OK, ali kao stvar izbora.

Čuo sam skoro za još jednu glupost - da nigde u programi ne sme da se ima if osim za proveru da li je pokazivač nula. Osećam da pucaju na polimorfizam, ali on ne može u celini da zameni if. Da mi je znati kako će onda da naprave algoritam sortiranja ili traženja minimuma/maksimuma niza, indeksiranih kontejnera itd. Ja ne znam nijedan način bez if-a.
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: Nasledjivanje samo izmedju interfejsa15.07.2012. u 16:58 - pre 143 meseci
Ali sto if za to, siguran sam da nesto moze da se uradi preko coallesce operatora.

Boze kakvih sve nalozenih pacijenata ima u bransi danas....


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
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Nasledjivanje samo izmedju interfejsa15.07.2012. u 17:19 - pre 143 meseci
Ma, to sam samo naveo kao primer nečega gde definitivno treba if (taj coalesce je implementiran preko if-a). Drugi primer - treba mi intenzitet vektorskog proizvoda dva vektora. Matematika kaže da je
.
Naravno, izraz pod korenom nikada ne može biti negativan, ali u matematici. U približnom računu na računaru može, pa bi ovo trebalo računati sa
Code (cpp):
struct vector {
    double x, y, z;
};

double operator*(vector a, vector b) {
    return a.x*b.x + a.y*b.y + a.z*b.z;
}

double intensity(vector a, vector b)
{
    double aa = a*a;
    double bb = b*b;
    double ab = a*b;
    double res2 = aa*bb-ab*ab;

    if (res2 <= 0) {
        return 0;
    }

    return sqrt(res2);
}

Ovo je naravno samo ilustracija if-a. Nećemo sad da opterećujemo kod još i prekoračenjima.
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: Nasledjivanje samo izmedju interfejsa16.07.2012. u 08:46 - pre 143 meseci
Pa sve apstraktne tehnike su uvek implementirane preko primitivnih. Sta je implementacija interfejsa nego indirektni pozivi function pointera iz tabele? Ako si dovoljno zaludan mozes u C-u komotno da napravis klasu sa sve virtuelnim metodama tako sto ces strukuri dodati listu/niz function pointera, imati "konstruktor" koji ce da je inicijalizuje i i onda svaki poziv "metoda" zapravo raditi kao poziv function pointera. I na kraju se sve to svodi na CALL varijante asemblera. Zlo je kad se ljudi zaborave u svoj apstrakciji pa ni ne znaju sta kako radi, ja sam za razliku od tebe ubedjen da ima ljudi koji veruju da coallesce operator magicno pretvara null u nesto.
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

tdusko

Član broj: 93380
Poruke: 1702
*.pool.mediaWays.net.



+768 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 09:18 - pre 143 meseci
Ja sam na primer naviko' da uvek koristim if jer mi je citljivije, a kolega u firmi kad radimo code review uzme pa mi sam svuda promeni "proste" if-ove u skraceni zapis.

Code:
if(o.Member != null) 
                tb_MyTextBox.Text = o.Member;
         else 
               tb_MyTextBox.Text = "default";


Code:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";


Jel radite vas dvojica recimo to? Delujete mi kao neko ko je imao prilike da radi kao dev leader u timu pa bas rekoh da vas pitam jel to normalno posto mene strasno nervira :)
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 09:34 - pre 143 meseci
Meni je ovaj slučaj čitljiv, i ja bih to isto tako napisao. Zapravo, ako je ovo C# u ovom specijalnom slučaju ja bih ga još više skratio koristeći takozvani null-coalesce operator (??, dva spojena upitnika), i linija bi izgledala ovako:

Code:
tb_MyTextBox.Text = o.Member ?? "default";


Ako je slučaj malo komplikovaniji onda ipak koristim if-else. Međutim ne verujem da bih ispravljao tuđ kod, jer kod ne sme da bude napredniji od onog ko ga piše i održava. Ako još nisi spreman za ternarni operator ?: onda jbg nisi spreman, i sve što ti je u kodu strano će te samo ometati i usporavati.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 09:36 - pre 143 meseci
Ja ti ne bih promenio (generalno ne menjam ljudima kod ako radi i ako nije sampionski tipa if a> b return true else return false ) ali bih ti preporucio conditional operator. U osnovi radi istu stvar i kompajler ga optimizuje na isti nacin ali bi trebao da steknes naviku da koristis taj operator zbog drugih prilika u kojima je nezaobilazan, npr u anon class inicijalizaciji

Code:

from x in list
select new {
   broj = x,
   klasa = x<0 ? "-" : "+"
}


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

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.eunet.yu.



+395 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 09:36 - pre 143 meseci
Radim i jedno i drugo . Ovu skracenu varijantu pisem kad tih uslova ima mnogo i kad znam da ce 1 if imati jednu liniju koda bez neke mogucnosti da se kod u true ili false grani prosiruje .
Pregledniji je kod kad imas mnogo takvih uslova a uglavnom je to u UI-u gde popunjavas neke kontrole pa ispitujes na NULL ...
Viva lollapalooza
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12849



+4784 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 09:47 - pre 143 meseci
Citat:
mmix: Ja ti ne bih promenio (generalno ne menjam ljudima kod ako radi i ako nije sampionski tipa if a> b return true else return false 8)) ali bih ti preporucio conditional operator.


Same here. Ne menjam tek tako nekome kod vec bih pre dao sugestiju ili, zavisno od situacije, dao njemu da menja (ako ima mnogo ili neki kao ovaj pomenuti sampion) :)

Edit: Inace, koristim obe varijante zavisno od procenjene citljivosti. Ako bi linija bila preduga, onda if/else, ako je nesto kratko onda conditional operator.
 
Odgovor na temu

tdusko

Član broj: 93380
Poruke: 1702
*.pool.mediaWays.net.



+768 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 10:17 - pre 143 meseci
Tu se izgleda radi o lenjosti :) Ja kada sam siguran da ce if da bude "prost" napisem ga skraceno, ali nekad nisam siguran pa na kraju ispadne tako, a budem lenj da refaktorisem kod. Sa druge strane njega izgleda mrzi da mi to predoci pa onda izmeni sam, a ja se osecam da me neko vuce za usi, a nisam kriv :)
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 10:37 - pre 143 meseci
Recimo da imam program koji radi sa grafikom i da prikaz zavisi od nekih parametara. Ako treba da se neki od tih parametara postavi na neku novu vrednost, može se pitati da li je ta "nova" vrednost jednaka postojećoj, pa ako jeste, ne raditi ništa.

Baš me zanima šta je zamena za takav if.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 10:47 - pre 143 meseci
Citat:
tdusko:Sa druge strane njega izgleda mrzi da mi to predoci pa onda izmeni sam, a ja se osecam da me neko vuce za usi, a nisam kriv :)


E pa, ako ne voliš da te ispravljaju onda im uskrati to tako što ćeš se ispraviti sam. Ako te više mrzi nego što te iritira onda verovatno i nemaš neki problem.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 10:57 - pre 143 meseci
Citat:
Nedeljko: Recimo da imam program koji radi sa grafikom i da prikaz zavisi od nekih parametara. Ako treba da se neki od tih parametara postavi na neku novu vrednost, može se pitati da li je ta "nova" vrednost jednaka postojećoj, pa ako jeste, ne raditi ništa.

Baš me zanima šta je zamena za takav if.


Trenutna "konvencionalna" logika je da ti svejedno postavis vrednost a da je na UI komponenti da (na neki magican nacin koji ne koristi if ) proveri da li treba da osvezi svoj prikaz, po principu "muko moja predji na drugoga". Zanimljivo je da bar .NET component dizajneri primenjuju tu tehniku (doduse preko if, ali pravicemo se da to ne znamo ), narocito od kad je INotifyPropertyChanged postao popularan.

Citat:
Mihajlo Cvetanović: E pa, ako ne voliš da te ispravljaju onda im uskrati to tako što ćeš se ispraviti sam. Ako te više mrzi nego što te iritira onda verovatno i nemaš neki problem.


meni zapravo ponasanje njegovog tim leadera deluje kao klasicno passive-agresive ponasanje techija koji je promovisan u lower management, pa ne ume sa ljudima ali je okurazen novopronadjenom moci Ni ja nikad nisam podnosio takve likove dok sam bio junior, poenta imanja tim lidera i seniora je da valjda nesto i naucis od njega/nje, ispravljanje tudjeg koda bez obrazlozenja je po meni teski faux pas.
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
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 15:34 - pre 143 meseci
mmix

Ne govorim ja o standardnim komponentama kao što je button, koje imaju svoju logiku, nego o nečemu što ja treba da crtam na osnovu nekih podataka.

U Qt-u redefinišem paintEvent metod. Dakle, nije to nešto što su Qt dizajneri (ili .NET dizajneri u slučaju .NET-a) odradili, već nešto što ja definitivno moram da odradim.
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: Nasledjivanje samo izmedju interfejsa16.07.2012. u 16:03 - pre 143 meseci
To je samo zato sto nisi otisao dovoljno duboko u apstrakciju, danas je 2012 ko jos pravi svoje graficke komponente (zezam se naravno, jos od prvog vagona) Poenta je da imho ljudi koji sebe (a i svoje timove) opterecuju takvim glupostima imaju previse slobodnog vremena na racun firme.
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
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: Nasledjivanje samo izmedju interfejsa16.07.2012. u 16:23 - pre 143 meseci
Ne, reč je o komponentama koje moraju da se prave. Takav je projekat. Ne postoje standardne komponente za tu specifičnu svrhu.

No, nije bitno ni to, nego da prilikom postavljanja neke vrednosti treba nešto uraditi ako je ta vrednost različita od trenutne.

Ajmo dalje,
Code (cpp):

class String
{
    char *buffer;
    int size;

public:
// ...
    String& operator=(const String &other) {
        if (this == &other) {
            return *this;
        }

        delete [] buffer;

        size = other.size;

        if (other.buffer == 0) {
            buffer = 0;
        } else {
            buffer = new char[size];
            memcpy(buffer, other.buffer, size);
        }

        return *this;
    }
// ...
};

Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
118.131.136.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Nasledjivanje samo izmedju interfejsa18.07.2012. u 06:31 - pre 143 meseci
Citat:
mmix:
Ja ti ne bih promenio (generalno ne menjam ljudima kod ako radi i ako nije sampionski tipa if a> b return true else return false 8)) ali bih ti preporucio conditional operator. U osnovi radi istu stvar i kompajler ga optimizuje na isti nacin ali bi trebao da steknes naviku da koristis taj operator zbog drugih prilika u kojima je nezaobilazan, npr u anon class inicijalizaciji

Ne rade uvek istu stvar, u zavisnosti od nivoa optimizacije i/ili kompajlera. Conditional operator ce generisati conditional move instrukciju dok ce if/else par da generise compare/jump par - ovo drugo je dosta losije.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Nasledjivanje samo izmedju interfejsa18.07.2012. u 09:22 - pre 143 meseci
Par desetina nanosekundi viška ja ne bih nazvao dosta lošije. Pustite kompajler da radi svoj posao, i skoncentrišite se na ono što je u kodu bitno, a to je da radi bez grešaka, i da se lako razume i menja.
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12849



+4784 Profil

icon Re: Nasledjivanje samo izmedju interfejsa18.07.2012. u 09:27 - pre 143 meseci
Zavisi koliko puta se izvrsava :) Ali da, uglavnom nije bitno. A mislim da se mmix-ov post odnosio na C#.
 
Odgovor na temu

[es] :: Art of Programming :: Nasledjivanje samo izmedju interfejsa

Strane: < .. 1 2 3 4

[ Pregleda: 12486 | Odgovora: 72 ] > FB > Twit

Postavi temu Odgovori

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