Buscar

02 Introdução ao Mundo OO

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Introdução ao Mundo Orientado a Objetos
“Conhecer herança e polimorfismo não o faz um profissional em orientação a objetos”
1
Introdução ao Mundo Orientado a Objetos
Herança
Polimorfismo
Encapsulamento
Abstração
Agregação, Composição e Navegabilidade
Acoplamento e Coesão
Interfaces
Introdução ao Mundo Orientado a Objetos
Orientação a objetos não é a solução para todos os problemas. Há um ditado que retrata muito bem isto: "quando a única ferramenta que temos na mão é um martelo, tudo vira prego". A idéia da OOP é agregar a modelos de programação estruturados e modular paradigmas que trazem benefícios objetivos. 
Herança
Herança realmente é um mecanismo poderoso da orientação a objetos mas, objetivamente não é a “panacéia tecnológica”. Herança agrega evidente reaproveitamento de código, onde verdadeira estruturas codificadas podem se especializadas em uma nova classe. Quando falamos em herança dois termos precisam ser esclarecidos: Generalização e Especialização. 
Polimorfismo
Polimorfismo é o principal recurso que justifica o uso de herança no seu código. Polimorfismo “várias formas” é uma técnica que permite o aumento da abstração na chamada a métodos de um objeto. Através de uma cadeia de heranças, métodos são herdados da classe progenitora, ocasionando com que todas as classes possuam o mesmo método, mas possuam efeitos diferenciados.
TAnimal
 procedure Walk;
end;
THuman = class(TAnimal) //herdará o método “Walk”
end;
TDog = class(TAnimal) //herdará o método “Walk”
end;
Encapsulamento
Todo objeto dever ser responsável por seus próprios comportamentos, com isto, precisa garantir a integridade daquilo que o faz funcionar de maneira regular. Encapsulamento é uma técnica OO para ocultar determinados membros de um objeto. Conhecido como “Data Hidding” o encapsulamento é utilizado como mecanismo regulador de acesso aos dados de um objetos. O encapsulamento torna as mudanças no comportamento interno de um objeto transparentes para outros objetos e auxilia na prevenção de problemas de efeitos colaterais no código. Pegue o que varia no seu código e encapsule!
abstração
Abstração é algo conceitual, diferente da herança, do polimorfismo e do encapsulamento que são pilares implementáveis 100% no mundo computacional e por isso facilmente identificável, a abstração é algo que leva em consideração mais o mundo real do que o computacional, você não vê a abstração apenas “olhando” para o código”
associações
Em análise e projeto orientado à objetos, uma associação representa um relacionamento entre objetos
Por exemplo, vários alunos podem estar associados à um único professor e um único aluno pode estar associado à vários professores
Neste caso, não existe um relacionamento de posse entre esses objetos. Todos os objetos são independentes
Um aluno pode existir sem a necessidade de um professor, da mesma forma que é possível existir um professor sem a necessidade da existência de um aluno
Simples
Agregação
Composição
Herança
Associação simples
A associação simples entre as classes é o tipo de ligação de classe mais utilizado nos diagramas de classe, a função da mesma é só mostrar o relacionamento ou dependência de uma classe com a outra. 
a Associação simples de classe nada mas é que uma linha preenchida que conecta uma classe a outra
Observando a imagem notamos que a classe Consulta usa uma classe Cliente para execução de uma tarefa ou a classe cliente utiliza a classe consulta mais o que é fato é que as duas colaboram para a execução de uma determinada tarefa
agregação
A associação de agregação sempre para indicar que um objeto colabora com outro objeto, mais a existência desse objeto não é obrigatória
Podemos dizer também que é uma associação em que um objeto é parte de outro, de tal forma que a parte pode existir sem o todo
Em mais baixo nível, uma agregação consiste de um objeto contendo referências para outros objetos, de tal forma que o primeiro seja o Todo, e que os objetos referenciados sejam as partes do todo
Também podemos dizer que é uma relação do tipo “todo/parte” ou “possui um” esse último é mais utilizado na qual uma classe representa uma coisa grande que é composta de coisas menores (classes agregadas)
composição
A associação de composição é um tipo de associação de agregação, onde a parte que compõe o todo depende do todo
Em outras palavras, os objetos são inseparáveis, quando um objeto Pai é destruído o objeto filho também é, pois ele faz parte do todo e compõe o todo
Quando se tem uma classe que depende de outra classe para ser utilizada e quando se destrói essa classe a outra também deve ser apagada ai temos um relacionamento de composição
herança
O mais forte dos tipos de associação existente entre duas classes
Neste tipo de associação a classe dependente passa a ter em sua estrutura dados e comportamento de sua classe ancestral e diferente das agregação e composição onde temos uma relação de todo/parte, na herança temos apenas o todo
Dependendo do ponto de vista pode ser considerada uma especialização ou generalização
NA especialização faz-se a leitura da classe pai para a classe filha
Na generalização faz-se a leitura da classe filha para a classe pai
O real motivo para o uso da OO
Baixo acoplamento e alta coesão
Acoplamento
Herança não é solução para todos os problemas, o velho problema de “martelos e pregos”. A herança atribui ao código uma dependência forte entre as classes, o que chamamos de “forte acoplamento”, o que contradiz ao paradigma da orientação a objetos que prega que o código deve possui “fraco acoplamento”. 
O que isto significa objetivamente para o programador? Forte acoplamento se traduz e dependências que refletem e diversos efeitos colaterais no código fonte, aquelas pequenas correções ou até mesmo melhorias que encadeiam uma série “bugs” em todo o projeto. 
Arquitetura Baseada em Abstração
O projeto deve possuir 3 características principais:
Camadas claramente definidas
Interfaces formais e explicitas entre as camadas
Detalhes ocultos e protegidos dentro de cada camada
Fonte: FEA/USP
Abandone o lugar comum
Abra a mente, expanda seus horizonte e desenvolva rotinas mais flexíveis
Sua grande aliada a partir de hoje
“Programa para uma interface, não para uma classe concreta”
Outro pica das galáxias
Interfaces
Interfaces
Disponível deste o Delphi 3, interfaces são grandes aliadas na saga da redução do acoplamento
São contratos que garantem que os objetos assumam comportamentos que antes não lhes pertenciam e permite que possamos interagir com estes métodos sem conhecer a implementação contrata de quem realmente faz acontecer
Substitui com mestria a falta de herança múltipla no Delphi
Possuem regras rígidas quanto a sua declaração, além de um comportamento interessante em relação a gerência de memória
Interfaces
Interfaces são contratos para grandes obras, não para construir apenas uma casa
Interfaces
Classes de Negócios
Contrato A
Contrato B
Contrato C Contrato D Contrato E
Contrato F
Classe Especialista
Classe Especialista
Classe Especialista
Classe Especialista
Interfaces
IControl = interface; 
 IWindow = interface 
 ['{00000115-0000-0000-C000-000000000044}'] 
 function GetControl(Index: Integer): IControl; 
 end; 
 IControl = interface 
 ['{00000115-0000-0000-C000-000000000049}'] 
 function GetWindow: IWindow; 
 end;
Coesão
Um código coerente é um código fiel às suas origens até a morte, um código que não se sabota, um código que faz apenas aquilo que é responsável por fazer
Em suma: “Uma classe, uma responsabilidade”
 Algum Pica das Galáxias
Coesão se traduz em eficácia e não apenas em eficiência. Sabes a diferença?

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais