Orientação a Objetos: princípios de OO para arquiteturas robustas

Veja nesse artigo o que analisar no design do seu software.

Fique por dentro
Este artigo aborda conceitos de orientação a objetos que permitirão ao leitor desenvolver código com maior qualidade visando maior reutilização, menos defeitos, design mais simples e melhor separação de responsabilidades. Para isto, são apresentadas interpretações dos conceitos fundamentais da orientação a objetos que servirão como alicerce para o aprofundamento nos conceitos de design que nortearão o desenvolvimento de aplicações mais robustas.

No nosso cotidiano, usamos generalizações todo o tempo. A generalização é um mecanismo extremamente útil que nos permite fazer referência a um grupo de indivíduos de uma determinada população através de suas características comuns.

Por exemplo, ao referenciarmos os alunos de uma turma através do nome da turma, estamos utilizando a característica daquelas pessoas serem alunos e a participação em um determinado grupo como características comuns. É muito mais simples do que enumerar todos, um a um, pelo nome.

Assim, recorremos a duas generalizações (“alunos” e a participação em uma turma específica) para “delimitar” o universo de indivíduos a que estamos nos referindo.

Caso tivéssemos apenas dito “a turma”, vários outros conceitos poderiam estar incluídos, como o professor, por exemplo. E caso tivéssemos dito apenas “alunos”, estaríamos nos referindo a alunos de diversas turmas. Desta forma, vemos que a generalização de uma característica comum a todos aqueles indivíduos fez surgir um conceito abstrato, o conceito de “aluno”.

“Aluno” é um conceito abstrato, criado pelo nosso poder de abstração. O que podemos dizer sobre um aluno de maneira genérica é que existe “um indivíduo que desempenha um comportamento” e a convenção é de que este indivíduo quando desempenha este comportamento tem o nome “aluno”.

Em uma sala de aula é possível apontar para “um aluno” (um indivíduo), mas não é possível apontar para “aluno” (conceito).

A capacidade de codificar em um software os conceitos abstratos do mundo real (o conceito aluno, por exemplo) e instanciar estes conceitos é o fundamento da orientação a objetos. Deste modo, em um software orientado a objetos, chamamos de classe a descrição dos conceitos do mundo real e de instância os indivíduos que desempenham os comportamentos descritos nestas classes.

Por sua vez, chamamos de atributos as características de um indivíduo (como pertencer a uma determinada turma) e de métodos, a representação de seus comportamentos.

Esta capacidade trouxe uma nova forma de entender e codificar software, permitindo que este possa, de forma modularizada, evoluir a um nível de complexidade muito maior que na programação estruturada.

Quando softwares se tornam grandes e complexos, ficam mais difíceis de serem mantidos; porém, quando são bem modularizados com responsabilidades isoladas em componentes específicos, a manutenibilidade é favorecida, agilizando o desenvolvimento através de reuso.

De tal modo, uma série de cuidados são necessários ao se projetar bem as classes e os componentes a fim de se construir softwares grandes e complexos tendo um baixo índice de retrabalho, mantendo razoáveis os níveis de produtividade dos desenvolvedores e a confiabilidade do software (importante para a confiança do cliente na qualidade do serviço prestado).

Ainda, conforme uma organização usa um software, suas necessidades mudam e os requisitos para que este software mantenha sua utilidade mudam junto. Isto (além da correção de erros provenientes do processo de construção do software) acarreta, muitas vezes, em pedidos de mudanças ou melhorias, fazendo com que a qualidade do software seja prejudicada.

Este processo natural de degeneração do software torna necessários cuidados extras para manter sua qualidade, garantindo que possa ser facilmente entendido por quem for implementar novas funcionalidades ou consertá-lo, reduzindo o impacto da mudança a poucas classes ou pequenos módulos bem delimitados.

Definindo uma classe

De acordo com a orientação a objetos,classes são conceitos definidos através de atributos e métodos que representam a descrição de objetos.

Este processo então exige uma “tradução” de conceitos para código. Assim como uma mensagem pode ser escrita em diferentes frases ou textos, um conceito pode ser codificado de diversas maneiras e não há regras para esta “tradução”. "

[...] continue lendo...

Artigos relacionados