L'incapsulamento è la confezione di dati e funzioni in un singolo componente. Incapsulamento, polimorfismo, ereditarietà: caratteristiche

20/02/2019

Alla fine degli anni '80, nulla di radicalmente nuovo accadeva nella programmazione. C'erano molte lingue, molte polemiche e c'era Turbo Pascal 5.5, e nel pacchetto della sua consegna c'erano alcuni strani file e alcune costruzioni non così usuali nella sintassi.

l'incapsulamento è

Forse, la programmazione orientata agli oggetti deve il suo aspetto a un artista sconosciuto, o forse a molti, ma l'idea di combinare codice e dati in quei tempi non portava un valore particolarmente grande. È stato associato in modo lasco e indiretto al termine "incapsulamento".

Strutture, funzioni e procedure

Già nelle prime versioni dei linguaggi di programmazione, anche prima dell'aspetto dei primi database, è diventato assolutamente chiaro che questo non è un numero o una stringa di caratteri, ma qualcosa di significativo. Lascia che sia una variabile "contatore" in un ciclo o tre variabili minuscole "cognome", "nome", "secondo nome", ma ha sempre un senso subito.

Il "contatore" è sempre dopo il ciclo e ci lavora. Un "cognome", "nome", "secondo nome" sarà annunciato fianco a fianco, e la loro partecipazione in molte parti del codice sarà condivisa. Da qualche parte saranno usati indipendentemente, in generale avranno un significato.

Funzioni e procedure originariamente apparivano come pezzi di codice comuni. Il loro uso era originariamente previsto altrove nel programma. La loro apparizione nel programma ha causato la ripetizione di blocchi delle stesse azioni. Effettuare un replay sotto forma di una funzione o di una procedura, semplificare le posizioni di ripetizione, ridurre la quantità di codice e semplificare il debugging.

eredità del polimorfismo di incapsulamento

Questa non era una programmazione orientata agli oggetti, ma fin dall'inizio della sua evoluzione, lo stile di codifica classico era impegnato nella compilazione di dati, nella creazione di strutture e sezioni funzionali del codice.

Le ragioni per l'inizio dell'incapsulamento

L'incapsulamento nella programmazione è iniziato molto prima della comparsa dell'OOP. Era nel profondo dello stile classico, significava funzionale programmazione, strutturale e ogni altro che ha cercato di trovare una via per il futuro.

Ogni compilatore e interprete del linguaggio ha diligentemente preso tutto di nuovo nella sua sintassi, offrendo agli sviluppatori opzioni per l'implementazione della semantica.

Le informazioni non sono mai state statiche, solo la programmazione è ancora contenta della sua versione formalizzata. Ma pur essendo rigorosamente formalizzati, l'informazione garantisce il lavoro del codice che è sempre associato ad esso. Le informazioni non possono mai essere statiche.

eredità di incapsulamento

L'esempio più banale di incapsulamento, che è stato conservato per lungo tempo ed è rilevante fino ad oggi. Tre variabili "cognome", "nome", "secondo nome", ovunque siano, richiedono sempre le funzioni di aggiunta, modifica, cancellazione. Inoltre, queste variabili forniscono una massa di persone specifiche, vale a dire un sacco di esempi:

  • Ivanov, Ivan, Ivanovich;
  • Petrova, Irina, Vasilyevna;
  • Kukushkina, Polina, Grigorievna;
  • ... e classe astratta ...
  • "cognome", "nome", "secondo nome";
  • ... e tre funzioni eterne ...
  • aggiungere;
  • cambiare;
  • rimuovere.

Esiste una grande varietà di tali costruzioni a qualsiasi livello (indirizzi, posizioni, personale, piano di produzione). E la complessità dell'implementazione di un design diverso sarà incredibilmente lunga.

Durata dell'istanza di incapsulamento

L'incapsulamento è dati e codice.

  • La parola è incapsulamento.
  • Versione latina - in capsula.

La parola "capsula" è ciò che significa. Il fatto che molte lingue e sviluppatori lo abbiano pensato (pubblico, protetto, privato) è un argomento separato e ha una relazione relativa o di applicazione al significato dell'incapsulamento.

In generale, un'istanza è solo un'opzione (un'impronta, un momento) di dati e quei tre metodi vivono per sempre. Il codice come filtro di informazione "assicura" la vita delle istanze, perché è una per tutte e, a proposito, per ora :

  • il codice è "permanente";
  • denota la più semplice azione immutabile.

Ma un'altra istanza può "buttare" l'attenzione.

Se l'esempio è assegnato all'elenco del personale della società, il regista e il contabile avranno un significato speciale nel set di copie. Il resto può rimanere nella solita "forma". Il regista e il contabile possono avere i propri codici, cioè le proprie funzioni.

Ciò significa che la vita di un'istanza non determina sempre la funzionalità delle tre parole magiche:

  • aggiungere;
  • cambiare;
  • rimuovere.

Se l'esempio è relativo al primo volo con equipaggio nello spazio, allora una dozzina di candidati per i primi cosmonauti avrà un sacco di funzionalità speciali, un centinaio di persone (esemplari) li guarderanno in un modo speciale, ci saranno molte più opzioni per specialisti che ne avranno molti speciali. funzioni.

Avvia OOP

"Abbiamo bisogno di cambiare qualcosa urgentemente", hanno pensato un certo numero di sviluppatori, e come buon esempio hanno suggerito di lavorare con gli oggetti su Turbo Pascal 6.0 Professional. Questa non è un'offerta ideale, ma una qualità molto alta semplice ed efficace.

incapsulamento dei dati

Supponendo che "incapsulamento, polimorfismo, ereditarietà" sia la base dell'oggetto, si ottiene un buon inizio. Il polimorfismo fornisce le dinamiche necessarie, poiché le istanze possono avere funzionalità diverse. Deve essere in qualche modo "legittimato" nell'oggetto. L'ereditarietà consente di riflettere l'omogeneità dell'oggetto, di costruire un albero genealogico di informazioni formalizzate.

Sembra difficile. Supponendo che l'incapsulamento dei dati sia una semplice combinazione di dati e codice, tutto diventa molto semplice e appare un grande concetto.

Un oggetto è dati e codice. Un'istanza di un oggetto sono solo i dati a cui il suo codice ha accesso. Potrebbero esserci molte istanze, ma il codice per loro è sempre lo stesso e non è allegato a tutti, ma è disponibile per tutti.

Quando un'istanza di un oggetto richiede un'attenzione speciale a se stessa, appare semplicemente un altro oggetto, che avrà una funzionalità migliorata, vale a dire che eredita tutto ciò che era nell'oggetto originale, ma aggiunge qualcosa di proprio.

Il mondo è riempito con istanze del secondo oggetto, che hanno anche nuovi bisogni. Nuove funzionalità e nuova struttura.

Ma non tutti i nuovi oggetti possono avere discendenti. Per alcuni, non sono più necessari. Come risultato di tale costruzione, si ottiene una immagine ramificata di oggetti, ma in realtà dà vita a una massa di esemplari collegati tra loro da pedigree e connessioni funzionali.

La variante ideale dell'implementazione dei compiti nello stile OOP è quando l'incapsulamento, il polimorfismo, l'ereditarietà sono pensati in modo così qualitativo che il codice è completamente assente nel programma. Gli oggetti stessi svolgono le loro funzioni, usano solo il loro codice, creano relazioni reciproche.

Vita OOP

In realtà, tutto sembra molto diverso. L'incapsulamento è buono e non si può discutere qui. Ma per costruire un'immagine corretta degli oggetti, per riflettere sulla funzionalità di ciascuno, per prevedere come si comportano determinati esemplari e cosa ci si può aspettare dai dati non è facile. È stato necessario semplificare la situazione e l'OLP ha seguito il percorso dell'automazione del lavoro degli sviluppatori, piuttosto che risolvere problemi reali.

Dal punto di vista della velocità di acquisizione di esperienza, questa è un'idea efficace, dopo tutto, perché l'OOP dovrebbe essere applicato all'automazione del lavoro di contabilità, quando può essere collegato al menu sulla pagina HTML?

Tutto è molto semplice: c'è un elemento del menu, ci sono le sue opzioni. Puoi invitare l'utente a scegliere le opzioni di menu (verticale, orizzontale, a discesa), puoi dare i pulsanti al modulo (rotondo, quadrato, arrotondato, ecc.).

esempio di incapsulamento

Poche persone sono interessate al lavoro e alla vita dello sviluppatore. Tutti hanno bisogno di contabilità, produzione, formazione, perché è necessario svolgere compiti reali. Quindi è necessario aumentare i collettivi, ma poi il sistema di oggetti sarà implementato da vari specialisti e possono danneggiarsi a vicenda.

In molti modi, questo ha messo l'OLP sulle rotaie di produzione. Non c'erano più dubbi: l'incapsulamento, l'ereditarietà è un buon modo, ma come proteggere gli oggetti dall'interferenza esterna, sia dall'esterno che lungo il lignaggio? Non sarà necessariamente un hacker. Accidentalmente causare danni modificando i dati dell'antenato, un altro sviluppatore può.

La programmazione moderna è composta da molti sviluppatori in molti uffici remoti. Come le api, gli sviluppatori moderni creano una struttura di oggetti comune. Ogni oggetto dovrebbe essere costruito secondo le regole generali e quei dati e metodi per i quali un programmatore è responsabile non dovrebbero essere accessibili agli altri. Quando qualcuno ha bisogno di qualcosa è un altro argomento. Secondo il principio di base, ognuno fa la propria attività sul proprio sito.

L'incapsulamento è buono, ma ...

PHPWord è un prodotto potente, ben fatto e promettente. Eccellente sistema di oggetti, pensato e funzionante.

Di seguito è riportato l'inizio della descrizione dell'oggetto interno di questo prodotto. Una semplice astrazione di una cella di una tabella da un'astrazione generalmente vuota - una sorta di contenitore. E questa non è tutta una descrizione.

L'esempio dell'autore non è un'immagine.

Non c'è bisogno di immergersi nelle terre selvagge per capire. L'uso di numerosi commenti qui non dà chiarezza, e le parole protette, private e pubbliche dicono, prima di tutto, che lo sviluppatore di terze parti, utilizzando questa libreria, ha cambiato privato in pubblico nel posto giusto (vedere il commento: "sc 19/06/2016 era privato ").

Si tratta di un errore nel codice, che, una volta applicato, lo sviluppatore è stato costretto a correggere e, pertanto, aveva bisogno di cambiare qualcosa.

Si può presumere che in fase di sviluppo fosse necessario limitare l'accesso a questi o altri oggetti, ma qui un'altra cosa è importante. C'è una vita di istanze, c'è una vita di oggetti, ma c'è già una nuova vita - quello che sta accadendo con il sistema di oggetti nella sua applicazione.

Vita nello sviluppo e vita nell'applicazione. Una caratteristica caratteristica della programmazione moderna è una rigida negazione della continuità. Se prima lo sviluppatore garantiva che ogni nuova versione completasse e migliorasse quella precedente, oggi ogni nuova versione dell'oggetto, della lingua, dell'ambiente di programmazione è fondamentalmente o almeno fondamentalmente diversa dalla precedente.

Anche i termini di hosting sull'hosting possono cambiare in modo da dover ripetere il codice. E spesso è molto difficile.

Buona eredità, buona resa

Nessuno è immune dagli errori. E ogni nuova attività richiede conoscenza. PHPWord è una buona libreria e devi solo abituarti. Molti professionisti hanno trascorso molto tempo. Uno sviluppatore che si è riunito per usarlo dovrebbe dedicare abbastanza tempo per studiare la struttura del file Word. Questo non è un segreto.

Il sistema di oggetti PHPWord diventerà trasparente e accessibile. Viene dato così com'è, ma se c'è il desiderio di andare oltre, perché la funzionalità corrente è insufficiente. Buona idea Allora questo è un altro sistema di oggetti, ed è meglio se va oltre.

Non tanto male è l'idea di una dura negazione della continuità: stimola lo sviluppo della conoscenza. Gli oggetti creati da un singolo team di sviluppatori sono i loro pensieri su come risolvere un problema, come presentare la sua funzionalità.

incapsulamento in programmazione

Capire questa soluzione con un'altra società di sviluppo è una trasformazione dell'esperienza. Se immaginiamo che questo sia solo un prototipo del necessario sistema di oggetti, allora perché non ereditarlo? Una buona eredità - una caratteristica dell'intelligenza naturale, si basa su qualcosa di adeguato dal lato della programmazione - questo è dall'area del futuro, anche se il più vicino.

Incapsulamento corretto

L'incapsulamento non è una combinazione di dati e codice. Questa è una combinazione di ciò che è disponibile e ciò che si desidera. Se pensate non con dati e algoritmi, ma percepite la realtà ed eseguono un'incapsulazione adeguata, ereditando questa azione dallo sviluppatore allo sviluppatore, allora è probabile: l'emergere di sistemi di oggetti in movimento e di auto-sviluppo è ancora possibile.