Domande su OOP in MQL5 - pagina 56

 
Aleksey Mavrin:

Mi hai già detto tante volte che sono uno stupido e che non capisco niente, che sono orgoglioso della mia compostezza, che non ti ho mandato una meritata scopata)

Fondamentalmente - una classe annidata rende opzionali i metodi pubblici per i campi privati, questa è la violazione dell'incapsulamento di cui stai scrivendo. Altri argomenti?

Dimostri la tua stupidità così costantemente che preferirei mandarti lì meritatamente.

Una classe annidata non fa quello che si scrive su di essa. E il compito del pattern Guardian può essere risolto senza una classe annidata e metodi pubblici non necessari.

Vi ricordo: ecco un esempio con una classe annidata e metodi pubblici.

 
Dmitry Fedoseev:

Dimostri la tua stupidità così costantemente che preferirei mandarti lì meritatamente.

Una classe annidata non fa quello che si scrive su di essa. E il problema del pattern Guardian può essere risolto senza una classe annidata e senza metodi pubblici inutili.

Cerchiamo di capire chi va alla fine))

Cosa non fa una classe annidata?

Hai scritto che "l'incapsulamento è rotto perché vengono creati metodi pubblici per campi privati".

Una classe annidata ha accesso ai campi privati senza richiedere la creazione di metodi pubblici.

s.s. Sei un habitué qui a giudicare dalla classifica. Ma bisogna imparare a comunicare e a dialogare. Ma non hai bisogno di questo nella tua vita.

 
Aleksey Mavrin:

Vediamo chi va alla fine).

Cosa non fa la classe annidata?

Hai scritto che "l'incapsulamento è rotto perché vengono creati metodi pubblici per campi privati".

Una classe annidata ha accesso ai campi privati senza richiedere la creazione di metodi pubblici.

s.s. Sei un habitué qui a giudicare dalla classifica. Ma bisogna imparare a comunicare e a dialogare. Ma non ne avete bisogno nella vita.

Lasciatemi ricordare: ecco un esempio con una classe annidata e metodi pubblici (cioè la classe annidata non ha aiutato a sbarazzarsi della necessità di creare metodi pubblici).

La classe annidata è solo una questione di visibilità della classe, non dell'oggetto. La classe annidata, semplicemente, non permette di creare un oggetto di questa classe, al di fuori della classe in cui è descritta. Pertanto, dovrete andarvene.

 
Aleksey Mavrin:

Esattamente - la struttura giusta. A tal fine, vale la pena considerare tutte le possibili varianti di questa stessa struttura, analizzare i loro pro e contro in un dato compito (tenendo conto dei requisiti di estensibilità e manutenzione, ecc.) e scegliere la migliore.

E i famigerati modelli stessi (qualunque cosa siano esattamente) non sono nemmeno una variante della struttura qui, ma solo un punto di riferimento per il cervello. È come "Se il problema corrisponde alla descrizione del problema del modello X, significa che può essere risolto applicando il modello X", ma si può anche risolverlo in un mucchio di altri modi.

E in generale, questi 27 pattern di base sono nati come una sorta di suggerimento per i programmatori su problemi tipici come risolverli seguendo i principi OOP. Se non c'è un compito di seguire i principi, come ha fatto Dmitry con le strutture, non c'è bisogno di modelli.

Grazie, buon post

Sei diverso dal resto del pannello ;)

 
Dmitry Fedoseev:

Vi ricordo che questo è un esempio con una classe annidata e metodi pubblici (cioè la classe annidata non ha aiutato a sbarazzarsi della necessità di creare metodi pubblici).

Una classe annidata è solo una questione di visibilità della classe, non dell'oggetto. La classe annidata, semplicemente , non permette di creare un oggetto di questa classe, al di fuori della classe in cui è descritta. Quindi devi andare.

No )) stupidità )) Una classe annidata ha accesso a TUTTI i campi PRIVATI della classe in cui è annidata. (Non lo sai? Beh, non c'è niente di cui parlare.

E questo senza contare l'assurdità che hai scritto che l'intero oggetto deve essere copiato per lo Shot...)) Si scopre che ... non ti dispiacerà se non torni presto))

 
Igor Makanu:

Grazie, buon post.

Sei diverso dal resto della discussione ;)

Igor, grazie anche a te, e su una parola gentile) e che tu crei argomenti interessanti per una costruttiva discussione reciproca ;)

 
Aleksey Mavrin:

No )) è una sciocchezza )) Una classe annidata ha accesso a TUTTI i campi PRIVATI della classe in cui è annidata. (Non lo sai? Allora non c'è niente di cui parlare.

E questo senza contare l'assurdità che hai scritto che l'intero oggetto deve essere copiato per lo Shot...)) Si scopre che ... non ti dispiacerà se non torni presto))

E come si chiama una classe annidata?

Non ho scritto assolutamente nulla su Snapshot qui.

 
class C1{
   protected:
      int x;
      class C2{
         protected:
         public:
         C2(){
            x=1;
         }
      };      
   public:
};

Dov'è l'accesso a x da C2?

Di nuovo, una classe annidata è solo una questione di visibilità della classe per creare un oggetto. Un oggetto di classe C2 può essere creato solo all'interno della classe C1. Questo è tutto. Questa è l'unica differenza dallo scrivere un tipo:

class C1{
   protected:
      int x;
   public:
};

class C2{
   protected:
   public:
   C2(){
      x=1;
   }
}; 


Ma sicuramente chiamerai qualcos'altro una classe annidata? Dicci cosa.

 
ahah )
 
TheXpert:
ahah )

Non lo sapevi nemmeno tu?