OOAD - Modelo de Objeto
O modelo de objeto visualiza os elementos em um aplicativo de software em termos de objetos. Neste capítulo, examinaremos os conceitos básicos e as terminologias dos sistemas orientados a objetos.
Objetos e Classes
Os conceitos de objetos e classes estão intrinsecamente ligados uns aos outros e formam a base do paradigma orientado a objetos.
Objeto
Um objeto é um elemento do mundo real em um ambiente orientado a objetos que pode ter uma existência física ou conceitual. Cada objeto tem -
Identidade que o distingue de outros objetos no sistema.
Estado que determina as propriedades características de um objeto, bem como os valores das propriedades que o objeto contém.
Comportamento que representa atividades externamente visíveis realizadas por um objeto em termos de mudanças em seu estado.
Os objetos podem ser modelados de acordo com as necessidades da aplicação. Um objeto pode ter uma existência física, como um cliente, um carro, etc .; ou uma existência conceitual intangível, como um projeto, um processo, etc.
Classe
Uma classe representa uma coleção de objetos com as mesmas propriedades características que exibem um comportamento comum. Ele fornece o projeto ou a descrição dos objetos que podem ser criados a partir dele. A criação de um objeto como membro de uma classe é chamada de instanciação. Assim, objeto é uma instância de uma classe.
Os constituintes de uma classe são -
Um conjunto de atributos para os objetos que devem ser instanciados da classe. Geralmente, diferentes objetos de uma classe têm alguma diferença nos valores dos atributos. Os atributos são freqüentemente chamados de dados de classe.
Um conjunto de operações que retratam o comportamento dos objetos da classe. As operações também são chamadas de funções ou métodos.
Example
Vamos considerar uma classe simples, Circle, que representa o círculo da figura geométrica em um espaço bidimensional. Os atributos desta classe podem ser identificados da seguinte forma -
- x – coord, para denotar a coordenada x do centro
- coord y, para denotar coordenada y do centro
- a, para denotar o raio do círculo
Algumas de suas operações podem ser definidas da seguinte forma -
- findArea (), método para calcular a área
- findCircumference (), método para calcular a circunferência
- escala (), método para aumentar ou diminuir o raio
Durante a instanciação, os valores são atribuídos a pelo menos alguns dos atributos. Se criarmos um objeto my_circle, podemos atribuir valores como x-coord: 2, y-coord: 3 e a: 4 para representar seu estado. Agora, se a operação scale () for realizada em my_circle com um fator de escala de 2, o valor da variável a se tornará 8. Esta operação traz uma mudança no estado de my_circle, ou seja, o objeto exibiu certo comportamento.
Encapsulamento e ocultação de dados
Encapsulamento
Encapsulamento é o processo de vincular atributos e métodos dentro de uma classe. Por meio do encapsulamento, os detalhes internos de uma classe podem ser ocultados de fora. Ele permite que os elementos da classe sejam acessados de fora apenas por meio da interface fornecida pela classe.
Ocultação de dados
Normalmente, uma classe é projetada de forma que seus dados (atributos) possam ser acessados apenas por seus métodos de classe e isolados do acesso externo direto. Este processo de isolar os dados de um objeto é chamado de ocultação de dados ou ocultação de informações.
Example
Na classe Circle, o ocultamento de dados pode ser incorporado tornando os atributos invisíveis de fora da classe e adicionando mais dois métodos à classe para acessar os dados da classe, a saber -
- setValues (), método para atribuir valores a x-coord, y-coord, e a
- getValues (), método para recuperar valores de x-coord, y-coord, e a
Aqui, os dados privados do objeto my_circle não podem ser acessados diretamente por nenhum método que não esteja encapsulado na classe Circle. Em vez disso, ele deve ser acessado por meio dos métodos setValues () e getValues ().
Passagem de mensagens
Qualquer aplicação requer uma série de objetos interagindo de maneira harmoniosa. Os objetos em um sistema podem se comunicar uns com os outros usando a passagem de mensagens. Suponha que um sistema tenha dois objetos: obj1 e obj2. O objeto obj1 envia uma mensagem ao objeto obj2, se obj1 deseja que obj2 execute um de seus métodos.
Os recursos de passagem de mensagens são -
- A passagem de mensagens entre dois objetos é geralmente unidirecional.
- A passagem de mensagens permite todas as interações entre objetos.
- A passagem de mensagens envolve essencialmente a chamada de métodos de classe.
- Objetos em processos diferentes podem estar envolvidos na passagem de mensagens.
Herança
Herança é o mecanismo que permite que novas classes sejam criadas a partir de classes existentes, estendendo e refinando seus recursos. As classes existentes são chamadas de classes básicas / classes pai / superclasses, e as novas classes são chamadas de classes derivadas / classes filhos / subclasses. A subclasse pode herdar ou derivar os atributos e métodos da (s) superclasse (s), desde que a superclasse assim o permita. Além disso, a subclasse pode adicionar seus próprios atributos e métodos e pode modificar qualquer um dos métodos da superclasse. Herança define um relacionamento “é um”.
Example
De uma classe Mamífero, várias classes podem ser derivadas, como Humano, Gato, Cão, Vaca, etc. Humanos, gatos, cães e vacas têm características distintas de mamíferos. Além disso, cada um tem suas características particulares. Pode-se dizer que uma vaca “é - um” mamífero.
Tipos de herança
Single Inheritance - Uma subclasse deriva de uma única superclasse.
Multiple Inheritance - Uma subclasse deriva de mais de uma superclasse.
Multilevel Inheritance - Uma subclasse deriva de uma superclasse que, por sua vez, é derivada de outra classe e assim por diante.
Hierarchical Inheritance - Uma classe tem várias subclasses, cada uma das quais pode ter subclasses subsequentes, continuando por vários níveis, de modo a formar uma estrutura em árvore.
Hybrid Inheritance - Uma combinação de herança múltipla e multinível de modo a formar uma estrutura de rede.
A figura a seguir descreve os exemplos de diferentes tipos de herança.
Polimorfismo
Polimorfismo é originalmente uma palavra grega que significa a capacidade de assumir várias formas. No paradigma orientado a objetos, o polimorfismo implica o uso de operações de maneiras diferentes, dependendo da instância na qual estão operando. O polimorfismo permite que objetos com diferentes estruturas internas tenham uma interface externa comum. O polimorfismo é particularmente eficaz ao implementar a herança.
Example
Vamos considerar duas classes, Circle e Square, cada uma com um método findArea (). Embora o nome e a finalidade dos métodos nas classes sejam os mesmos, a implementação interna, ou seja, o procedimento de cálculo da área é diferente para cada classe. Quando um objeto da classe Circle invoca seu método findArea (), a operação encontra a área do círculo sem nenhum conflito com o método findArea () da classe Square.
Generalização e especialização
Generalização e especialização representam uma hierarquia de relacionamentos entre classes, onde as subclasses herdam de superclasses.
Generalização
No processo de generalização, as características comuns das classes são combinadas para formar uma classe em um nível superior de hierarquia, ou seja, as subclasses são combinadas para formar uma superclasse generalizada. Representa um relacionamento “é - um - tipo - de”. Por exemplo, “carro é um tipo de veículo terrestre” ou “navio é um tipo de veículo aquático”.
Especialização
A especialização é o processo reverso de generalização. Aqui, os recursos distintivos de grupos de objetos são usados para formar classes especializadas a partir de classes existentes. Pode-se dizer que as subclasses são as versões especializadas da superclasse.
A figura a seguir mostra um exemplo de generalização e especialização.
Links e associação
Ligação
Um link representa uma conexão por meio da qual um objeto colabora com outros objetos. Rumbaugh a definiu como “uma conexão física ou conceitual entre objetos”. Por meio de um link, um objeto pode invocar os métodos ou navegar por outro objeto. Um link descreve o relacionamento entre dois ou mais objetos.
Associação
Associação é um grupo de links com estrutura e comportamento comuns. A associação representa o relacionamento entre objetos de uma ou mais classes. Um link pode ser definido como uma instância de uma associação.
Grau de uma associação
O grau de uma associação denota o número de classes envolvidas em uma conexão. O grau pode ser unário, binário ou ternário.
UMA unary relationship conecta objetos da mesma classe.
UMA binary relationship conecta objetos de duas classes.
UMA ternary relationship conecta objetos de três ou mais classes.
Razões de cardinalidade de associações
A cardinalidade de uma associação binária denota o número de instâncias que participam de uma associação. Existem três tipos de razões de cardinalidade, a saber -
One–to–One - Um único objeto da classe A está associado a um único objeto da classe B.
One–to–Many - Um único objeto da classe A está associado a muitos objetos da classe B.
Many–to–Many - Um objeto da classe A pode estar associado a muitos objetos da classe B e, inversamente, um objeto da classe B pode estar associado a muitos objetos da classe A.
Agregação ou Composição
Agregação ou composição é um relacionamento entre classes pelo qual uma classe pode ser composta de qualquer combinação de objetos de outras classes. Ele permite que os objetos sejam colocados diretamente no corpo de outras classes. A agregação é referida como um relacionamento “parte de” ou “tem um”, com a capacidade de navegar do todo para suas partes. Um objeto agregado é um objeto composto por um ou mais outros objetos.
Example
Na relação, “um carro tem um motor”, o carro é o objeto inteiro ou o agregado, e o motor é uma “parte” do carro. A agregação pode denotar -
Physical containment - Por exemplo, um computador é composto de monitor, CPU, mouse, teclado e assim por diante.
Conceptual containment - Exemplo, o acionista possui uma ação.
Benefícios do modelo de objeto
Agora que examinamos os principais conceitos relativos à orientação a objetos, vale a pena observar as vantagens que este modelo tem a oferecer.
Os benefícios de usar o modelo de objeto são -
Ajuda no desenvolvimento de software mais rápido.
É fácil de manter. Suponha que um módulo desenvolva um erro, então um programador pode consertar esse módulo específico, enquanto as outras partes do software ainda estão funcionando.
Ele oferece suporte a atualizações relativamente fáceis.
Ele permite a reutilização de objetos, designs e funções.
Reduz os riscos de desenvolvimento, especialmente na integração de sistemas complexos.