Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

Questo è un post tradotto da IA.

제이온

[Oggetti] Capitolo 1. Oggetti, progettazione

Seleziona la lingua

  • Italiano
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

Testo riassunto dall'intelligenza artificiale durumis

  • Nello sviluppo software, la pratica è più importante della teoria, e attraverso semplici programmi è possibile comprendere l'importanza della progettazione orientata agli oggetti.
  • Utilizzando un'applicazione di vendita di biglietti come esempio, viene spiegato come scrivere codice flessibile alle modifiche riducendo le dipendenze e il accoppiamento tra gli oggetti, e viene confrontata la differenza tra la programmazione procedurale e la programmazione orientata agli oggetti.
  • La progettazione orientata agli oggetti crea codice modificabile, e gli oggetti sono entità autonome che si assumono la responsabilità dei propri dati, quindi le dipendenze tra gli oggetti che collaborano devono essere gestite in modo appropriato.

Introduzione

Robert L. Glass ha sostenuto che la pratica precede la teoria. Soprattutto nello sviluppo software, la pratica è un campo tipicamente in anticipo rispetto alla teoria, e gli sviluppatori ottengono il massimo quando si sporcano le mani creando codice concreto. Pertanto, metteremo da parte teoria e concetti per il momento e daremo un'occhiata a un semplice programma.


Implementare un'applicazione di vendita di biglietti

  • Stiamo programmando un piccolo evento per promuovere un piccolo teatro.
    • Contenuto dell'evento: inviando inviti gratuiti per lo spettacolo agli spettatori scelti tramite estrazione a sorte.
  • Dobbiamo separare gli spettatori che hanno vinto l'evento da quelli che non hanno vinto.
    • Spettatori vincitori dell'evento: scambia l'invito con un biglietto.
    • Spettatori che non hanno vinto l'evento: acquista un biglietto pagando.



Qual è il problema?

Robert Martin descrive tre funzioni che un modulo software (indipendentemente dalle dimensioni, come una classe, un pacchetto o una libreria, qualsiasi elemento che compone un programma) dovrebbe avere.


  • Funziona correttamente durante l'esecuzione.
  • Esiste per essere modificato.
    • La modifica dovrebbe essere possibile con un semplice lavoro.
  • Comunicare con le persone che leggono il codice.
    • Dovrebbe essere facile da leggere e capire per gli sviluppatori.


La precedente applicazione di vendita di biglietti soddisfa il primo vincolo di esecuzione corretta, ma non soddisfa gli obiettivi di facilità di modifica e comunicazione.


Codice che non soddisfa le aspettative

Diamo un'occhiata al motivo per cui non soddisfa l'obiettivo della comunicazione.


  • Cosa fa il metodo enter() della classe Theater
    • Il teatro controlla la borsa dello spettatore per vedere se contiene un invito.
    • Se la borsa contiene un invito, dice al venditore di spostare il biglietto che è conservato alla biglietteria nella borsa dello spettatore.
    • Se la borsa non contiene un invito, toglie denaro dalla borsa dello spettatore pari al costo del biglietto, compra il biglietto e lo mette nella borsa.
  • Dal punto di vista dello spettatore, il teatro, una terza parte, deve guardare e rovistare nella borsa, prendere i soldi e mettere il biglietto.
  • Dal punto di vista del venditore, il teatro, una terza parte, deve guardare e manipolare il valore dei biglietti e del denaro nella biglietteria senza permesso.
  • Un codice comprensibile è un codice che non devia troppo dalle nostre aspettative, e il teatro sopra menzionato devia dalle nostre aspettative.
    • Lo spettatore dovrebbe prendere i soldi dalla propria borsa e pagare il venditore per ottenere il biglietto.
    • Il venditore dovrebbe prendere il biglietto direttamente dalla biglietteria e consegnarlo allo spettatore, e ricevere i soldi dallo spettatore e conservarli alla biglietteria.
  • Inoltre, per capire il metodo enter(), dobbiamo ricordare molti dettagli.
    • Audience ha un Bag.
    • Bag contiene denaro e biglietti.
    • TiketSellet vende biglietti da TicketOffice e TicketOffice conserva denaro e biglietti.


Codice vulnerabile alle modifiche

Il metodo enter() assume due condizioni.

  • Lo spettatore porta sempre una borsa per conservare denaro e inviti.
  • Il venditore vende biglietti solo dalla biglietteria.


E se così non fosse?

  • Lo spettatore potrebbe non avere una borsa.
  • Lo spettatore potrebbe usare una carta di credito invece del denaro.
  • Il venditore potrebbe vendere biglietti al di fuori della biglietteria.


Ad esempio, per soddisfare la prima richiesta, dobbiamo eliminare l'oggetto Bag di Audience e modificare il metodo enter() della classe Theater. Questo perché la classe Theater dipende eccessivamente dal fatto che lo spettatore abbia una borsa e che il venditore venda biglietti solo dalla biglietteria. Se uno qualsiasi di questi dettagli cambia, dobbiamo modificare sia la classe interessata (es. Theater) che le classi su cui dipende.


Questo è un problema relativo alla dipendenza tra gli oggetti e la dipendenza implica un impatto sulla modifica. Tuttavia, l'obiettivo della progettazione orientata agli oggetti è costruire una comunità di oggetti che collaborano tra loro, quindi invece di eliminare completamente la dipendenza, dobbiamo mantenere ilminimo di dipendenzenecessarie per implementare le funzionalità dell'applicazione ed eliminare le dipendenze non necessarie.


Quando la dipendenza tra gli oggetti è eccessiva, si dice che illivello di accoppiamento è alto, e maggiore è il livello di accoppiamento tra due oggetti, maggiore è la probabilità che cambino insieme. Pertanto, l'obiettivo della progettazione è ridurre il livello di accoppiamento tra gli oggetti per ottenere una progettazione facilmente modificabile.


Migliorare la progettazione

Theater non ha bisogno di sapere che lo spettatore ha una borsa e che il venditore vende biglietti dalla biglietteria. Theater vuole solo che lo spettatore entri nel teatro. Pertanto, dobbiamo rendere lo spettatore e il venditore entità autonome in modo che possano gestire il denaro e l'invito nella borsa dello spettatore e il venditore gestisca i biglietti e le tariffe di vendita della biglietteria da soli.


Aumentare l'autonomia

Un oggetto che svolge solo attività strettamente correlate e delega attività non correlate ad altri oggetti è considerato ad alto livello di coesione. Creando oggetti autonomi che gestiscono i propri dati, possiamo ridurre l'accoppiamento e aumentare la coesione.


Procedurale vs. orientato agli oggetti

  • Procedurale
    • Il metodo enter() di Theater è un processo e Audience, TicketSeller, Bag, TicketOffice sono dati.
    • Il metodo di posizionamento dei processi e dei dati in moduli separati è chiamato programmazione procedurale.
    • Ci sono molti codici che vanno contro la nostra intuizione. (es. lo spettatore gestisce autonomamente il denaro e l'invito.)
    • È difficile limitare l'impatto della modifica dei dati.
    • La responsabilità è gestita centralmente. (Theater gestisce tutto)
  • Orientato agli oggetti
    • Il metodo di posizionamento dei dati e dei processi all'interno dello stesso modulo è chiamato programmazione orientata agli oggetti.
    • Possiamo scrivere codice in linea con la nostra intuizione.
    • L'impatto della modifica dei dati può essere limitato efficacemente tramite l'incapsulamento.
    • Ogni oggetto è responsabile di se stesso.


Può essere migliorato.

  • La classe Bag della classe Audience è ancora un'entità passiva trascinata dalla classe Audience, quindi dobbiamo rendere la classe Bag un'entità autonoma.
  • Anche TicketOffice della classe TicketSeller è gestita arbitrariamente da TicketSeller. Dobbiamo rendere TicketOffice un'entità autonoma.
    • Tuttavia, dopo la modifica, TicketOffice ha un accoppiamento aggiuntivo con Audience.
    • Come questo, la progettazione richiede un'attenta considerazione degli scambi. In questo caso, possiamo concordare di creare TicketOffice come un oggetto parzialmente passivo per ridurre l'accoppiamento con Audience.



Sì, è una bugia!

  • Anche se sono entità passive nel mondo reale, una volta entrati nel mondo della programmazione orientata agli oggetti, tutto diventa attivo e autonomo.
  • È meglio usare la personificazione per pensare agli oggetti passivi come se stessero ridendo, parlando e arrabbiandosi.


Progettazione orientata agli oggetti

Perché la progettazione è necessaria?

  • La progettazione è la disposizione del codice.
  • Una buona progettazione è una progettazione che svolge completamente le funzioni richieste oggi e che può accettare facilmente i cambiamenti di domani.


Progettazione orientata agli oggetti

  • Un codice modificabile è un codice facile da capire.
  • Il paradigma orientato agli oggetti ci aiuta a scrivere codice come vediamo il mondo.
  • Gli oggetti sono entità autonome che sono responsabili dei propri dati.
  • Una buona progettazione orientata agli oggetti è una progettazione che gestisce adeguatamente la dipendenza tra gli oggetti che collaborano.


Fonti

  • Oggetti
제이온
제이온
제이온
제이온
[Oggetto] Capitolo 2. Programmazione orientata agli oggetti Questo documento descrive la metodologia di programmazione orientata agli oggetti per implementare un sistema di prenotazione di biglietti cinematografici, trattando concetti come collaborazione, oggetti, classi, ereditarietà, polimorfismo, astrazione e c

28 aprile 2024

[Effictive Java] Item 6. Evitare la creazione di oggetti non necessari Questa è una guida su come ridurre la creazione di oggetti non necessari in Java. Per gli oggetti immutabili come String e Boolean, è meglio usare i letterali e per le espressioni regolari è meglio mettere in cache l'istanza di Pattern. Inoltre, l'autobox

28 aprile 2024

[Effective Java] Item 1. Consider static factory methods instead of constructors I metodi di fabbrica statici sono un modo flessibile ed efficiente per creare istanze invece di costruttori. Possono avere un nome, restituire istanze che soddisfano determinate condizioni e migliorare le prestazioni tramite il caching. A differenza del m

27 aprile 2024

[Non specialisti, sopravvivere come sviluppatori] 14. Riepilogo dei contenuti del colloquio tecnico per sviluppatori junior Questa è una guida alla preparazione ai colloqui tecnici per sviluppatori junior. Copre argomenti come la memoria principale, le strutture dati, RDBMS e NoSQL, programmazione procedurale e orientata agli oggetti, override e overload, algoritmi di sostituz
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 aprile 2024

Perché è necessario approcciare gli investimenti con un pensiero probabilistico: non potrai mai conoscere le cause esatte dei risultati degli investimenti I risultati degli investimenti sono fortemente influenzati non solo dalle capacità, ma anche dalla fortuna, ed è impossibile determinarne le cause esatte. Pertanto, gli investimenti dovrebbero essere affrontati con un pensiero probabilistico, combattendo
고집스런가치투자
고집스런가치투자
고집스런가치투자
고집스런가치투자

3 aprile 2024

Cosa ne pensi della mia idea? Il significato di un'idea va oltre il semplice pensiero creativo, dipende da come può influenzare la vita quotidiana degli altri e trasmettere un significato. Attraverso la prospettiva filosofica di Heidegger, possiamo ripercorrere il vero valore e signif
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

7 maggio 2024

Pensare con il primo principio: mettere in discussione tutto, fin dalle fondamenta Scopri come utilizzare il metodo di pensiero del primo principio di Elon Musk per identificare il cuore di un problema e trovare soluzioni innovative. Da un'analisi del prezzo delle batterie al servizio di consegna in bundle di Duit, esplora esempi reali
울림
울림
울림
울림

18 marzo 2024

Quando il 'customer-centric' è aziendale La 'bias dell'attore-osservatore' si riferisce alla tendenza a considerare i fattori situazionali quando si agisce, ma a giudicare le azioni degli altri in base al loro carattere o intenzioni. Questo bias può apparire anche nel processo decisionale aziend
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

22 maggio 2024

Amore e cambiamento di lavoro 2: il potere dell'osservazione -2 Piuttosto che affidarsi a consulenti esterni per migliorare la cultura aziendale, è necessario analizzare la cultura aziendale e cercare cambiamenti attraverso l'osservazione "interna" delle interazioni dei dipendenti, della disposizione degli spazi, dei
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

9 maggio 2024