Una domanda per gli esperti di OOP. - pagina 43

 
Andrey Barinov:

Peter, consiglio vivamente

https://en.wikipedia.org/wiki/Code_Complete

Grazie. Cercherò di prenderlo e leggerlo.
 
Artyom Trishkin:
Peter. Ecco perché dico: non c'è bisogno di un'eredità senza cervello. Separazione e classificazione chiare.

Ecco un esempio:

La categoria "Frutta" è l'oggetto base.

Classi - "Fruit" e "Vegetable" sono discendenti della classe "Fruit".

La classe "Fruit" è il genitore delle classi "Kiwi", "Mango", "Lemon" e "Orange".

C'è una nuova categoria "Agrumi".

Mettetelo tra la classe "Frutta" e i suoi successori - Kiwi, Mango, Limone e Arancia.

"Citrus" è il genitore del limone e dell'arancia.


Poi, - incrociamo Mango e Limone e otteniamo - l'oggetto Lee-Mango.

L'oggetto contiene in parte proprietà di agrumi e in parte proprietà non di agrumi. Ha DUE genitori e questa gerarchia non può essere ottimizzata.

Così abbiamo un'ereditarietà multipla dell'oggetto Lee-Mango e un doppio percorso verso l'oggetto sottostante Fruit: attraverso la catena degli agrumi e attraverso la catena Mango.

In queste catene, dobbiamo bypassare inutili proprietà dei genitori per preservare la personalità di "Lee-Mango".

 

Peter, si chiama: fottere il proprio cervello - inventare difficoltà insormontabili. È necessario specificare il compito e creare delle classi per esso.

Perché introdurre una classe intermedia chiamata "agrumi"? Forse il problema può essere risolto semplicemente aggiungendo la proprietà "agrumi" alla lista dinamica.

 
Dmitry Fedoseev:

Peter, si chiama: fottere il proprio cervello - inventare difficoltà insormontabili. È necessario specificare il compito e creare delle classi per esso.

Perché introdurre una classe intermedia chiamata "agrumi"? Forse il problema può essere risolto semplicemente aggiungendo la proprietà "citrus" alla lista dinamica.

Volevo scrivere sulle proprietà proprio ora.
La proprietà gustativa sarà la media delle proprietà dei due frutti.
 

E questo. OOP è, dopo tutto, uno strumento di programmazione, non uno strumento di dati (come dire). Lo strumento dei dati è un database.

Tre tavoli. Una tabella ha due colonne: l'id del frutto e il suo nome. L'altro ha due colonne: l'id della proprietà e il suo nome. Il terzo ha due colonne: id del frutto, id della proprietà.

Di conseguenza, è possibile aggiungere all'infinito nuove proprietà, assegnarle al frutto e ottenere così qualsiasi nuovo frutto.

I mezzi per risolvere il problema devono essere adeguati al compito.

 
Dmitry Fedoseev:

Peter, si chiama: fottere il proprio cervello - inventare difficoltà insormontabili. È necessario specificare il compito e creare delle classi per esso.

Perché introdurre una classe intermedia chiamata "agrumi"? Forse il compito può essere risolto semplicemente aggiungendo la proprietà "agrumi" alla lista dinamica.

Così sia.

Ma che dire dell'incrocio delle proprietà dei due oggetti che genera un nuovo oggetto? Il nuovo oggetto erediterà parzialmente le proprietà degli altri due oggetti.

Come implementare la sua eredità "parziale" tra diversi oggetti (i suoi genitori) e l'oggetto base?

 
Реter Konow:

Così sia.

Ma che dire dell'incrocio delle proprietà di due oggetti che generano un nuovo oggetto? Il nuovo oggetto erediterà parzialmente le proprietà di altri due oggetti.

Come implementare la sua eredità "parziale" da diversi altri oggetti?

Applicando un algoritmo appropriato per risolvere questo particolare problema.

OOP è uno strumento di programmazione, non un mezzo per descrivere il mondo circostante, indipendentemente dal fatto che corrisponda ad ogni altro da qualche punto di vista.

 
Dmitry Fedoseev:

E questo. OOP è, dopo tutto, uno strumento di programmazione, non uno strumento di dati (come dire). Lo strumento dei dati è un database.

Tre tavoli. Una tabella ha due colonne: l'id del frutto e il suo nome. L'altro ha due colonne: l'id della proprietà e il suo nome. Il terzo ha due colonne: id del frutto, id della proprietà.

Di conseguenza, è possibile aggiungere all'infinito nuove proprietà, assegnarle al frutto e ottenere così qualsiasi nuovo frutto.

I mezzi per risolvere il problema devono corrispondere al problema.

Non si tratta di proprietà, ma di eredità. Cioè la distribuzione delle proprietà e dei metodi tra gli oggetti.

I nuovi oggetti collegheranno le proprietà degli oggetti precedenti in diverse combinazioni, il che aumenterà la complessità delle loro catene all'oggetto base.

 
Реter Konow:

Non si tratta di proprietà, ma di eredità. Cioè la distribuzione delle proprietà e dei metodi tra gli oggetti.

I nuovi oggetti collegheranno le proprietà degli oggetti precedenti in diverse combinazioni, il che aumenterà la complessità delle loro catene all'oggetto base.

Gli oggetti stessi non lo faranno. Seleziona le proprietà di un frutto e le proprietà di un altro frutto dal database, combina (lascia qualcosa, scarta qualcosa) - ottieni un nuovo frutto - aggiungilo al database.

 
Anche la natura non ha possibilità illimitate di combinare le proprietà. Esiste un certo numero di cromosomi, e sono limitati ad un insieme di proprietà.
Motivazione: