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

Esta é uma postagem traduzida por IA.

제이온

[Objeto] Capítulo 1. Objetos, Design

  • Idioma de escrita: Coreana
  • País de referência: Todos os países country-flag

Selecionar idioma

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

Texto resumido pela IA durumis

  • Na programação de software, a prática é mais importante do que a teoria, e um programa simples pode mostrar a importância do design orientado a objetos.
  • Usando um aplicativo de venda de ingressos como exemplo, explica como escrever código flexível para alterações, reduzindo as dependências e o acoplamento entre objetos, e compara as diferenças entre programação procedural e orientada a objetos.
  • O design orientado a objetos cria código modificável e os objetos são entidades autônomas que são responsáveis por seus próprios dados e devem gerenciar adequadamente as dependências entre os objetos que colaboram.

Introdução

Robert L. Glass argumentou que a prática precede a teoria. Especialmente no desenvolvimento de software, a prática é um campo onde a prática precede a teoria, e os desenvolvedores aprendem mais ao sujar as mãos com código concreto. Portanto, vamos deixar a teoria e os conceitos para mais tarde e dar uma olhada em um programa simples.


Implementando uma Aplicação de Venda de Ingressos

  • Estamos planejando organizar um pequeno evento para promover um teatro.
    • Conteúdo do evento: Sorteio para enviar convites para os sortudos para assistir ao show gratuitamente.
  • Precisamos separar os participantes que ganharam o evento dos que não ganharam.
    • Participantes que ganharam o evento: trocar o convite por um ingresso.
    • Participantes que não ganharam o evento: comprar o ingresso por dinheiro.



Qual é o problema?

Robert Martin descreve três funções que um módulo de software (independentemente do tamanho, como uma classe, pacote ou biblioteca, qualquer elemento que compõe um programa) deve ter.


  • Funciona corretamente em tempo de execução.
  • Existe para ser modificado.
    • A modificação deve ser possível com um mínimo de esforço.
  • Comunicar-se com aqueles que leem o código.
    • O desenvolvedor deve ser capaz de ler e entender facilmente.


O aplicativo de venda de ingressos descrito anteriormente atende ao primeiro requisito de execução correta, mas não atende aos objetivos de facilidade de modificação e comunicação.


Código que não atende às expectativas

Vamos analisar o motivo pelo qual o objetivo da comunicação não é atendido.


  • O que o método enter() da classe Theater faz?
    • O teatro abre a bolsa do espectador para ver se há um convite dentro.
    • Se houver um convite na bolsa, ele pede ao vendedor para mover o ingresso que está guardado no caixa para a bolsa do espectador.
    • Se não houver um convite na bolsa, ele pega o dinheiro da bolsa do espectador, compra um ingresso e o coloca na bolsa do espectador.
  • Do ponto de vista do espectador, o teatro, como um terceiro, deve examinar livremente sua bolsa, pegar o dinheiro e colocar um ingresso nela.
  • Do ponto de vista do vendedor, o teatro, como um terceiro, deve examinar livremente os ingressos e o dinheiro no caixa sem permissão.
  • Código compreensível significa código que não se desvia muito das nossas expectativas, e o teatro acima desvia-se das nossas expectativas.
    • O espectador deve retirar o dinheiro da sua bolsa e pagá-lo ao vendedor para receber o ingresso.
    • O vendedor deve retirar o ingresso do caixa e entregá-lo ao espectador, e receber o dinheiro do espectador e guardá-lo no caixa.
  • Além disso, para entender o método enter(), você precisa se lembrar de vários detalhes.
    • Audience tem Bag.
    • Bag contém dinheiro e ingresso.
    • TiketSellet vende ingressos no TicketOffice, e TicketOffice armazena dinheiro e ingressos.


Código vulnerável a alterações

O método enter() pressupõe duas condições.

  • O espectador sempre carrega uma bolsa para guardar dinheiro e convite.
  • O vendedor vende ingressos apenas no caixa.


E sobre a situação abaixo?

  • O espectador pode não ter uma bolsa.
  • O espectador pode usar um cartão de crédito, não dinheiro.
  • O vendedor pode vender ingressos fora do caixa.


Por exemplo, para atender ao primeiro requisito, precisamos remover o objeto Bag de Audience e modificar o método enter() da classe Theater. Isso ocorre porque a classe Theater depende muito do fato de que o espectador está carregando uma bolsa e o vendedor está vendendo ingressos apenas no caixa. Se um desses detalhes mudar, precisamos modificar tanto a classe quanto a classe dependente (ex. Theater).


Este é um problema relacionado à dependência entre objetos, e a dependência implica um impacto na modificação. No entanto, o objetivo do projeto orientado a objetos é construir uma comunidade de objetos que cooperam entre si, dependendo um do outro, então, em vez de simplesmente remover a dependência, precisamosmanter o mínimo de dependênciasnecessário para implementar a funcionalidade do aplicativo e remover as dependências desnecessárias.


Chamamos de acoplamentoo caso em que a dependência entre objetos é excessiva. Quanto maior o acoplamento entre dois objetos, maior a probabilidade de eles serem modificados juntos. Portanto, o objetivo do projeto é reduzir o acoplamento entre objetos para criar um projeto que seja fácil de modificar.


Melhorando o projeto

O Theater não precisa saber se o espectador está carregando uma bolsa ou se o vendedor está vendendo ingressos no caixa. O Theater só quer que o espectador entre no teatro. Portanto, devemos permitir que o espectador processe independentemente o dinheiro e o convite dentro da bolsa, e permitir que o vendedor processe independentemente os ingressos e o preço de venda no caixa.


Aumentar a autonomia

Dizemos que um objeto tem alta coesão quando ele executa apenas tarefas intimamente relacionadas e delega tarefas não relacionadas a outros objetos. Criar objetos autônomos que processam seus próprios dados pode reduzir o acoplamento e aumentar a coesão.


Orientação a procedimentos e orientação a objetos

  • Orientação a procedimentos
    • O método enter() do Theater é um processo, e Audience, TicketSeller, Bag e TicketOffice são dados.
    • O estilo de colocar processos e dados em módulos separados é chamado de programação orientada a procedimentos.
    • Há muito código que é contrário à nossa intuição. (ex. O espectador gerencia seu próprio dinheiro e convite).
    • É difícil restringir o impacto da mudança de dados.
    • A responsabilidade é gerenciada de forma centralizada. (Theater gerencia tudo)
  • Orientação a objetos
    • O estilo de colocar dados e processos dentro do mesmo módulo é chamado de programação orientada a objetos.
    • Podemos escrever código que corresponde à nossa intuição.
    • O impacto da mudança de dados pode ser restrito de forma eficaz por meio de encapsulamento.
    • Cada objeto é responsável por si mesmo.


Podemos melhorar ainda mais.

  • A classe Bag da classe Audience ainda é um ser passivo arrastado pela classe Audience, então precisamos tornar a classe Bag um objeto autônomo.
  • O TicketOffice da classe TicketSeller também é administrado livremente pela TicketSeller. Precisamos tornar o TicketOffice um objeto autônomo.
    • No entanto, após a modificação, TicketOffice acabou sendo acasalado com Audience.
    • Como este é o caso, o projeto deve ser ponderado cuidadosamente. Neste caso, podemos concordar em criar um TicketOffice que seja um objeto passivo em certa medida para reduzir o acoplamento com Audience.



É mentira!

  • Mesmo que seja uma entidade passiva na vida real, quando entra no mundo da programação orientada a objetos, tudo se torna uma entidade ativa e autônoma.
  • É bom usar a personificação para pensar em objetos passivos como se estivessem rindo, falando e brigando.


Projeto Orientado a Objetos

Por que a modelagem é necessária?

  • O projeto é a disposição do código.
  • Um bom projeto é um que atende totalmente aos requisitos de hoje e aceita mudanças futuras sem problemas.


Projeto Orientado a Objetos

  • Código modificável é código fácil de entender.
  • O paradigma orientado a objetos nos ajuda a escrever código da maneira como vemos o mundo.
  • Os objetos são entidades autônomas que são responsáveis por seus próprios dados.
  • Um ótimo projeto orientado a objetos é um projeto que gerencia adequadamente a dependência entre objetos cooperativos.


Fontes

  • Objetos
제이온
제이온
제이온
제이온
[Objetos] Capítulo 2. Programação Orientada a Objetos Este capítulo explica como implementar um sistema de reserva de ingressos para filmes usando programação orientada a objetos. Ele define objetos como filme, exibição, pessoa, política de desconto e condição de desconto, e descreve como calcular o preço co

28 de abril de 2024

[Effective Java] Item 6. Evite a criação de objetos desnecessários Este é um guia sobre como reduzir a criação de objetos desnecessários em Java. Para objetos imutáveis como String, Boolean, é melhor usar literais e, para expressões regulares, é melhor armazenar em cache a instância Pattern. Além disso, o autoboxing pode

28 de abril de 2024

[Effective Java] Item 1: Considere métodos de fábrica estáticos em vez de construtores Os métodos de fábrica estáticos são uma maneira flexível e eficiente de criar instâncias em vez de construtores. Eles podem ter um nome, retornar instâncias que atendem a condições específicas e melhorar o desempenho por meio do cache. Ao contrário do pad

27 de abril de 2024

[Não graduado, sobrevivendo como desenvolvedor] 14. Resumo do conteúdo da entrevista técnica frequente para desenvolvedores juniores Guia de preparação para entrevista técnica para desenvolvedores juniores. Área de memória principal, estrutura de dados, RDBMS e NoSQL, orientação de procedimentos e orientação de objetos, sobreposição e sobrecarga, algoritmo de substituição de página, pr
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 de abril de 2024

Ideias para melhorar o programa de negociação automatizada Este artigo apresenta ideias para melhorar as funcionalidades do programa de negociação automatizada de Grid Trading, sugerindo a inclusão de gerenciamento de grandes eventos, lógica de gerenciamento de investimentos, funcionalidade de posição curta, entr
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마
(로또 사는 아빠) 살림 하는 엄마

21 de abril de 2024

Amor de Troca 2 e Cultura Organizacional: O Poder da Observação -2 Em vez de depender de consultores externos para melhorar a cultura organizacional, é preciso analisar a cultura organizacional e buscar mudanças por meio da observação "interna", como a interação dos funcionários, o layout do espaço e os símbolos. O popul
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

9 de maio de 2024

Criando um CLI elegante com Rust Este artigo descreve como implementar aplicações CLI com Rust. Usando as bibliotecas clap e ratatui, criamos um programa CLI com recursos de login e logout. Abordamos o desenvolvimento geral de CLI baseado em Rust, incluindo a definição de opções de coman
곽경직
곽경직
곽경직
곽경직
곽경직

13 de março de 2024

[Concorrência] Operação Atômica: Memory Fence e Memory Ordering Esta postagem de blog explica como considerar a ordem da memória em operações atômicas e a importância das opções de ordenamento. Ele explica as várias opções de ordenamento, como Relaxado, Adquirir, Lançar, AcqRel e SecCst, junto com os prós e contras de
곽경직
곽경직
곽경직
곽경직
곽경직

12 de abril de 2024

Modelagem de dados lógica do projeto Kanban Board 2 Explica passo a passo como realizar a modelagem de dados lógica com base no ERD de modelagem de dados conceitual, apresentando os desafios e soluções que surgem durante o processo de normalização. Aborda em detalhes a preocupação de separar o author_id e
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 de abril de 2024