Discussione:
Conflitto metodo tra base e derivata
(troppo vecchio per rispondere)
Emanuele Merlo
2018-08-03 09:03:24 UTC
Permalink
Il metodo Lion::Copy nasconde Animal::Copy (vedi sotto), nell'implementazione bisogna ricordarsi di fare una chiamata esplicita anche al metodo della classe base.
Esiste un disegno migliore per disegnare questi oggetti in modo da non essere proni a dimenticanze ed errori?


class Animal
{
public:
// ...
bool Copy(const Animal&)
{

}
};


class Lion : public Animal
{
public:
// ...
bool Copy(const Lion&);

};
enoquick
2018-08-04 02:44:42 UTC
Permalink
Post by Emanuele Merlo
Il metodo Lion::Copy nasconde Animal::Copy (vedi sotto), nell'implementazione bisogna ricordarsi di fare una chiamata esplicita anche al metodo della classe base.
Esiste un disegno migliore per disegnare questi oggetti in modo da non essere proni a dimenticanze ed errori?
class Animal
{
// ...
bool Copy(const Animal&)
{
}
};
class Lion : public Animal
{
// ...
bool Copy(const Lion&);
};
forse e' questo che intendevi:

In Animal:
virtual bool Copy(const Animal&);

In Lion:
bool Copy(const Animal&)override;



Oppure questo:

class Animal {
public:
using unique_ptr_t=std::unique_ptr<Animal>;
virtual unique_ptr_t clone()const=0;

},


class Lion : public Animal {
public:
unique_ptr_t clone()const override;
};
_merlinO_
2019-03-01 16:20:26 UTC
Permalink
Post by enoquick
virtual bool Copy(const Animal&);
bool Copy(const Animal&)override;
class Animal {
using unique_ptr_t=std::unique_ptr<Animal>;
virtual unique_ptr_t clone()const=0;
},
class Lion : public Animal {
unique_ptr_t clone()const override;
};
No così sarebbe stato normale... :)

Avevo scritto questo post perché nel progetto che stavo sviluppando, tutte le classi dovevano derivare dalla stessa classe base (come si faceva un tempo con la CObject delle MFC), ma che è stata implementata con dei limiti che causano il problema che ho tentato di esporre.

Una volta che le classi derivate dalla base diventano migliaia, correggere è impossibile. Per questo mi chiedevo se il linguaggio o qualche buona pratica potessero evidenziare/evitare questi problemi prima che diventino una catastrofe.
enoquick
2019-03-02 02:50:32 UTC
Permalink
Post by _merlinO_
Post by enoquick
virtual bool Copy(const Animal&);
bool Copy(const Animal&)override;
class Animal {
using unique_ptr_t=std::unique_ptr<Animal>;
virtual unique_ptr_t clone()const=0;
},
class Lion : public Animal {
unique_ptr_t clone()const override;
};
No così sarebbe stato normale... :)
Avevo scritto questo post perché nel progetto che stavo sviluppando, tutte le classi dovevano derivare dalla stessa classe base (come si faceva un tempo con la CObject delle MFC), ma che è stata implementata con dei limiti che causano il problema che ho tentato di esporre.
Una volta che le classi derivate dalla base diventano migliaia, correggere è impossibile. Per questo mi chiedevo se il linguaggio o qualche buona pratica potessero evidenziare/evitare questi problemi prima che diventino una catastrofe.
Allora scusami ma non ho capito bene cosa intendi visto che i due esempi
da me postati non vanno bene.
_merlinO_
2019-03-02 17:09:18 UTC
Permalink
Post by enoquick
Allora scusami ma non ho capito bene cosa intendi visto che i due esempi
da me postati non vanno bene.
Purtroppo è passato troppo tempo, credo mi fossi ritrovato in un problema di design creato dalla classe base (non creata da me). Fossero stati metodi virtuali non ci sarebbe stato problema.
enoquick
2019-03-02 17:21:48 UTC
Permalink
Post by _merlinO_
Post by enoquick
Allora scusami ma non ho capito bene cosa intendi visto che i due esempi
da me postati non vanno bene.
Purtroppo è passato troppo tempo, credo mi fossi ritrovato in un problema di design creato dalla classe base (non creata da me). Fossero stati metodi virtuali non ci sarebbe stato problema.
Pensandoci forse una cosa di questo genere ?


class base {
public:
void speak() { pre(); virtual_speak();post();}
protected:
virtual void virtual_speak()=0;
private;
void pre();
void post();
};

class d : public base {
protected:
void virtual_speak() override;
};

Evita di chiamare il metodo della classe base

Ronie
2019-02-25 15:40:50 UTC
Permalink
Post by Emanuele Merlo
Il metodo Lion::Copy nasconde Animal::Copy (vedi sotto), nell'implementazione bisogna ricordarsi di fare una chiamata esplicita anche al metodo della classe base.
Esiste un disegno migliore per disegnare questi oggetti in modo da non essere proni a dimenticanze ed errori?
class Animal
{
// ...
bool Copy(const Animal&)
{
}
};
class Lion : public Animal
{
// ...
bool Copy(const Lion&);
};
ma perchè il c++ è cosi noioso?
enoquick
2019-02-25 19:36:26 UTC
Permalink
Post by Ronie
Post by Emanuele Merlo
Il metodo Lion::Copy nasconde Animal::Copy (vedi sotto),
nell'implementazione bisogna ricordarsi di fare una chiamata esplicita
anche al metodo della classe base.
Esiste un disegno migliore per disegnare questi oggetti in modo da non
essere proni a dimenticanze ed errori?
class Animal
{
   // ...
   bool Copy(const Animal&)
   {
   }
};
class Lion : public Animal
{
   // ...
   bool Copy(const Lion&);
};
ma perchè il c++ è cosi noioso?
E' fatto cosi,e' per gente noiosa
a***@gmail.com
2019-02-28 11:12:50 UTC
Permalink
On Monday, 25 February 2019 15:40:50 UTC, Ronie wrote:

[...]
Post by Ronie
ma perchè il c++ è cosi noioso?
E` un linguaggio vecchio, che si porta dietro costrutti vecchi, prolissi e inutilmente complessi. Persino Stroustrup comincia a essere seriamente preoccupato[*]. Se vuoi un consiglio: passa ad altro :)

[*]https://www.theregister.co.uk/2018/06/18/bjarne_stroustrup_c_plus_plus/
enoquick
2019-02-28 13:24:08 UTC
Permalink
Post by a***@gmail.com
[...]
Post by Ronie
ma perchè il c++ è cosi noioso?
E` un linguaggio vecchio, che si porta dietro costrutti vecchi, prolissi e inutilmente complessi. Persino Stroustrup comincia a essere seriamente preoccupato[*]. Se vuoi un consiglio: passa ad altro :)
[*]https://www.theregister.co.uk/2018/06/18/bjarne_stroustrup_c_plus_plus/
Sara anche vecchio,prolisso e noioso ed inutilmente complesso.
Ma java non e' universale come c++.
Rimane il buon vecchio C ma per progetti complessi non e' adatto.
Alla fin fine occorrerebbe un sostituto che per ora non c'e
Forse Rust in futuro potra esserlo ma per ora non e' cosi
a***@gmail.com
2019-02-28 13:27:43 UTC
Permalink
On Thursday, 28 February 2019 13:24:10 UTC, enoquick wrote:

[...]
Post by enoquick
Ma java non e' universale come c++.
Mai parlato di Java. Che Java sia l'alternativa a C++, nella testa degli altri, e` una tua fantasia da language jihadist che non sei altro.

Ti e` stato gia` consigliato: parla di un linguaggio (Java o altro) quando lo conosci. Su Java, hai appena scritto l'ennesima scemenza.
Post by enoquick
Rimane il buon vecchio C ma per progetti complessi non e' adatto.
Non c'e` solo C e C++. Esistono linguaggi come Go, per esempio. Linguaggi con cui sono stati costruiti tool come Docker e Kubernetes.
Post by enoquick
Alla fin fine occorrerebbe un sostituto che per ora non c'e
Certo che c'e`.
enoquick
2019-02-28 15:12:42 UTC
Permalink
Post by a***@gmail.com
[...]
Post by enoquick
Ma java non e' universale come c++.
Mai parlato di Java. Che Java sia l'alternativa a C++, nella testa degli altri, e` una tua fantasia da language jihadist che non sei altro.
Ti e` stato gia` consigliato: parla di un linguaggio (Java o altro) quando lo conosci. Su Java, hai appena scritto l'ennesima scemenza.
Post by enoquick
Rimane il buon vecchio C ma per progetti complessi non e' adatto.
Non c'e` solo C e C++. Esistono linguaggi come Go, per esempio. Linguaggi con cui sono stati costruiti tool come Docker e Kubernetes.
Post by enoquick
Alla fin fine occorrerebbe un sostituto che per ora non c'e
Certo che c'e`.
Se hai un sostituto presentalo ad esempio ai signori che hanno
progettato Fallout4 per PC
Vediamo se gli va bene.
Ovviamente questo e' solo un esempio,esistono miliardi di righe di
codice in c++ in giro per il mondo.
Vai da lor signori e offrigli il sostituto.
Se riescono a sopravvivere dinosauri come COBOL e FORTRAN allora mi sa
che c++ avra ancora lunga vita al dispetto di quello che pensi tu.
4ndre4
2019-02-28 16:22:18 UTC
Permalink
On Thursday, 28 February 2019 15:12:46 UTC, enoquick wrote:

[...]
Se hai un sostituto presentalo[...]
Non te ne uscire coi soliti argomenti fantoccio che ti piacciono tanto. Tool come Docker a Kubernetes sono stati scritti in Go. Le alternative a C++ ci sono GIA`. Informati.
enoquick
2019-02-28 16:28:10 UTC
Permalink
Post by 4ndre4
[...]
Se hai un sostituto presentalo[...]
Non te ne uscire coi soliti argomenti fantoccio che ti piacciono tanto. Tool come Docker a Kubernetes sono stati scritti in Go. Le alternative a C++ ci sono GIA`. Informati.
Se ci sono alternative come mai e' il linguaggio piu usato al 3/4 posto
sul pianeta ?
Evidentemente queste alternative non vengono considerate molto.
4ndre4
2019-02-28 16:56:01 UTC
Permalink
On Thursday, 28 February 2019 16:28:11 UTC, enoquick wrote:

[...]
Post by enoquick
Se ci sono alternative come mai e' il linguaggio piu usato al 3/4 posto
sul pianeta ?
Le solite scemenze. Perche` esiste un mare di codice legacy. Esattamente come per il COBOL. Da qui a dire che il COBOL e` ancora forte, ce ne passa.
Post by enoquick
Evidentemente queste alternative non vengono considerate molto.
Evidentemente non ti fai le domande vere: chiediti perche` un tool strausatissimo come Docker ed un orchestrator strausatissimo come Kubernetes sono scritti in Go. Chiediti perche` Prometheus e` scritto in Go. Chiediti perche` Grafana e` scritto in Go. Chiediti perche` Terraform e` scritto in Go. Chiediti perche` etcd e` scritto in Go. E molto altro ancora. Un tempo, C e C++ per quei tool sarebbe stata d'obbligo.

Ma sto parlando arabo per te, vero?

Evidentemente, sei il solito incompetente.
enoquick
2019-02-28 17:23:09 UTC
Permalink
Post by 4ndre4
[...]
Post by enoquick
Se ci sono alternative come mai e' il linguaggio piu usato al 3/4 posto
sul pianeta ?
Le solite scemenze. Perche` esiste un mare di codice legacy. Esattamente come per il COBOL. Da qui a dire che il COBOL e` ancora forte, ce ne passa.
Post by enoquick
Evidentemente queste alternative non vengono considerate molto.
Evidentemente non ti fai le domande vere: chiediti perche` un tool strausatissimo come Docker ed un orchestrator strausatissimo come Kubernetes sono scritti in Go. Chiediti perche` Prometheus e` scritto in Go. Chiediti perche` Grafana e` scritto in Go. Chiediti perche` Terraform e` scritto in Go. Chiediti perche` etcd e` scritto in Go. E molto altro ancora. Un tempo, C e C++ per quei tool sarebbe stata d'obbligo.
Ma sto parlando arabo per te, vero?
Evidentemente, sei il solito incompetente.
Chiediti sto mke2fs perche te lo invio
C++ non ha solo codice legacy (tutti i linguaggi piu usati hanno codice
legacy in giro per il pianeta)
In c++ sviluppano oggi e se qualcuno ha deciso di fare in Go qualche
cosa non significa una beneamata mazza.
Rimane sempre il 3/4 linguaggio usato sul pianeta quindi non ho bisogno
di chiedermi delle scelte fatte da qualcuno.
Se vuoi saperle rivolgiti a chi a scritto Kubernetes e tutti i tuoi sw
che ti piacciono tanto.
4ndre4
2019-02-28 18:43:36 UTC
Permalink
On Thursday, 28 February 2019 17:23:12 UTC, enoquick wrote:

[...]
Post by enoquick
Chiediti sto mke2fs perche te lo invio
E infatti me lo chiedo, dal momento che non significa un cazzo e che e` una stronzata che capisci solo tu :)
Post by enoquick
C++ non ha solo codice legacy (tutti i linguaggi piu usati hanno codice
legacy in giro per il pianeta)
Ma C++ e` tra quelli che soffre maggiormente del problema. Perche`? Perche` andava di moda un tempo e non attrae piu`: inutilmente complesso, prolisso, antiquato. Con un comitato standard che e` sulla via del tracollo, come puntualizzato da Stroustrup - il cui articolo oviamente non leggi perche` la tua conoscenza dell'inglese e` sotto lo zero.
Post by enoquick
In c++ sviluppano oggi e se qualcuno ha deciso di fare in Go qualche
cosa non significa una beneamata mazza.
Certo che conta. Conta alla luce del fatto che un tempo C o C++ sarebbero stati linguaggi eletti per quello. Io lo so benissimo perche` il C++ e` utilizzato ancora oggi. Sei tu che ignori perche` il resto del mondo valuti altre soluzioni per problemi complessissimi come quelli gestiti da Kubernetes. Ma cosa vuoi saperne tu? Sei un language jihadist confinato da secoli in quattro stupidaggini. Cosa ne sai? :)
acc
2019-02-28 20:15:08 UTC
Permalink
Post by 4ndre4
Io lo so benissimo perche`
Forse perche' sei uscito dal CEPU?
ROTFL! Non ho mai letto tante stronzate.
4ndre4
2019-02-28 21:39:48 UTC
Permalink
On Thursday, 28 February 2019 20:15:04 UTC, acc wrote:

[...]
LOL :) Ma esisti ancora? Tranquillo, non mi aspetto che un certo "acc" comprenda quanto scritto ;)
acc
2019-03-01 13:45:28 UTC
Permalink
Post by 4ndre4
LOL :) Ma esisti ancora? Tranquillo, non mi aspetto che un certo "acc" comprenda quanto scritto ;)
Certo coglione, comprendere non fa parte del tuo dizionario.
f***@gmail.com
2019-02-28 23:30:58 UTC
Permalink
Post by 4ndre4
Cosa ne sai? :)
Ah, l'inossidabile Laforgia, che da più di trent'anni risponde con insulti a
domande che nessuno ha posto.

Sull'argomento (che, come al solito, lui stesso ha portato in OT) ci starebbe
pure da parlare: personalmente non ho né la voglia né la forza di rispondere
a chi ovviamente non ha la capacità di comprendere anche semplici testi,
quindi passo.


Ciao!
enoquick
2019-03-01 03:06:14 UTC
Permalink
Post by 4ndre4
[...]
Post by enoquick
Chiediti sto mke2fs perche te lo invio
E infatti me lo chiedo, dal momento che non significa un cazzo e che e` una stronzata che capisci solo tu :)
Voglio lasciarti con un dubbio atroce da non dormire la notte
Quindi non ti spieghero il significato,se non ci arrivi continua a non
dormire la notte.
Post by 4ndre4
Post by enoquick
C++ non ha solo codice legacy (tutti i linguaggi piu usati hanno codice
legacy in giro per il pianeta)
Ma C++ e` tra quelli che soffre maggiormente del problema. Perche`? Perche` andava di moda un tempo e non attrae piu`: inutilmente complesso, prolisso, antiquato. Con un comitato standard che e` sulla via del tracollo, come puntualizzato da Stroustrup - il cui articolo oviamente non leggi perche` la tua conoscenza dell'inglese e` sotto lo zero.
Quell'articolo lo avevo gia letto e ti avevo gia risposto
Ti avevo chiesto di specificare le frasi complete in quanto non avevo
trovato niente riguardo a quanto affermi
Mi hai risposto picche che nel tuo linguaggio significa i soliti insulti.
PS
Ho un master in lingua inglese
Post by 4ndre4
Post by enoquick
In c++ sviluppano oggi e se qualcuno ha deciso di fare in Go qualche
cosa non significa una beneamata mazza.
Certo che conta. Conta alla luce del fatto che un tempo C o C++ sarebbero stati linguaggi eletti per quello. Io lo so benissimo perche` il C++ e` utilizzato ancora oggi. Sei tu che ignori perche` il resto del mondo valuti altre soluzioni per problemi complessissimi come quelli gestiti da Kubernetes. Ma cosa vuoi saperne tu? Sei un language jihadist confinato da secoli in quattro stupidaggini. Cosa ne sai? :)
Io non ignoro un beata fava
Se tu che tiri fuori discorsi assurdi sul perche hanno fatto il sw X non
con c++ ma con linguaggio Y.
Forse vai ad intervistare i progettisti sul perche hanno scelto Y
invece che c++ ?
Ovviamente no,le tue sono belle congetture.
Continua a sognare bello che intanto le prestazioni del tuo java non mi
sembrano cosi entusiasmanti come speravi
E poi sarei io un language jihadist
Loading...