Baixe o app para aproveitar ainda mais
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?
Compartilhar