terça-feira, 18 de agosto de 2009

Análise Orientada a Objeto

Uma das principais atividades de um analista é a análise de um problema e a modelagem conceitual de soluções na forma de sistemas. Para isto, o analista se utiliza de ferramentas e técnicas de apoio de modo a aumentar eficiência e a eficácia na produção de software.

Como o nome já sugere, a modelagem compreende a produção de modelos capazes de descrever a solução proposta pelo analista de forma conceitual. Deste modo, é possível se promover a comunicação entre o analista e o cliente que encomendou o produto de software em questão.

Conforme citado no post anterior, a análise estruturada e essencial faz uso dos diagramas de contexto, de diagramas de fluxo de dados e de diagramas de entidade e relacionamento. A modelagem orientada a objetos se utiliza de modelos constantes na UML, mas esse assunto merece um post a parte.

O primeiro passo para se aprender a modelar um sistema orientado a objeto é conhecer o que chamamos de paradigma da orientação a objetos. Entende-se por paradigma a representação de um padrão a ser seguido, um modo de se pensar sobre, encarar algo ou agir de acordo com algum contexto. Profundo não! Sem frescura, é conhecer os conceitos dos elementos que constitui a Orientação a objetos (classes, objetos, herança, polimorfirmo, encapsulamento entre outros).

Bom então "bora começar do começo"

Objetos

Boa parte de nosso entendimento e relacionamento com o mundo se dá por meio do conceito de objetos. Ao observarmos as coisas ou seres que existem ao nosso redor, há uma tendência natural de tentarmos identificar o que são essas diferentes entidades, ou seja, como aparentam ser e que comportamento tem.

Um carro possui em comum quatro rodas e tem como comportamento se locomover. Apesar de possuir características comuns, os objetos possuem características que os identificam de forma única. O número de chassi de um carro nunca se repete por exemplo. São estas características que definem o "estado" a identidade do objeto.

Classes

Já as características comuns como cor, potencia, quantidade de lugares, etc nos permitem categorizar /agrupar/ "classificar" os objetos em conjuntos. A esses conjuntos damos o nome de classes. É natural para facilitarmos nosso entendimento, criarmos uma classificação para as coisas que embora seja distintas possuem características comuns.

Na pratica, podemos definir uma classe como sendo uma estrutura que uni as variáveis e os procedimentos presentes em um programa.

Podemos dizer que um objeto é uma "instância" de uma classe.

Uma classe é uma estrutura composta por atributos (características) e métodos (comportamentos).

Quando instanciamos um objeto de uma classe, atribuímos valores iniciais aos atributos desse objeto através de um método especial chamado de método construtor Para limpar esse objeto da memória principal do computador utilizamos o método conhecido como destrutor.

Encapsulamento

O encapsulamento indica que podemos utilizar um objeto conhecendo apenas a sua interface, isto é, sua aparência exterior sem conhecer seu funcionamento interior. Por exemplo, você envia ordens a um carro quando o está dirigindo sem precisar conhecer o que rola "por trás dos bastidores". Quando você liga um carro que atividades esse carro realiza para atender a este comando!

O estado de um objeto só pode ser alterado através de seus comportamentos visíveis.

Os membros de uma classe (atributos e métodos) possuem indicadores de visibilidade conhecidos como modificadores de acesso. Através deles, determinamos o nível de acesso desses membros.

Um membro privado só pode ser visualizado pela classe que o contém.

Um membro protegido só pode ser acessado pela classe que o contém e por classes que herdam esses membros.

Um membro público pode ser acessado por qualquer classe.

Os valores dos atributos de um objeto devem ser modificados através de seus métodos públicos, ou seja, através de seus "métodos setadores".

Um método definido como estático pode ser invocado sem a necessidade de se instanciar um objeto da classe.


Herança

A herança é o mecanismo que permite a criação de classes mais específicas a partir de classes mais genéricas. É esse paradigma que promove a reutilização ou reaproveitamento de caracteríscas e comportamentos.

Um carro de passeio e um utilitário são classes mais específicas que possui características comuns herdadas de uma classe mais genérica - a classe carro.

No final das contas a herança acaba criando uma hierarquia entre classes mais genéricas(superclasses) e classes mais especializadas (subclasses).

Cabe aqui falar de outros modificadores de acesso.

Classes abstratas que não podem ser instanciadas podendo apenas ser herdadas.

Classes finais não podem ser herdadas.

Os métodos abstratos são aqueles que são declarados numa superclasse e implementados em suas subclasses.

Uma interface é uma estrutura que contem apenas a assinatura de métodos, porém o contéudo desses métodos é escrita nas classes que implementam essa interface.

Polimorfismo

A palavra polimorfismo sugere o conceito de várias formas. Esse paradigma nos permite redefinir comportamentos. Todo carro possui o comportamento "passar marcha" , entretanto um carro com câmbio automático realiza essa tarefa de maneira diferente de um carro com câmbio mecânico.

Na programação orientada a objeto o polimorfismo é promovido através da sobrecarga e da sobrescrita de métodos.

A Sobrescrita refere-se apenas a metodos das classes filhas. É o ato de mudar o comportamento de um método em uma subclasse.

A Sobrecarga refere-se tanto a mesma classe quanto a classe filha. É o ato de ter-se mais de um método com o mesmo nome, porém com lista de parâmetros diferentes, ou seja, com assinaturas distintas.

Não existe sobrescrita em métodos da mesma classe, isso não faz sentido. Por outro lado existe sobrecarga, facilitando o programador com sua API.

Métodos finais não podem ser sobrescritos.

Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento ( métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. Esses objetos se comunicam através da troca de mensagens, ou seja, atráves da solicitação de serviços.

Bom, tentei aqui explanar uma série de conceitos importantes. No próximo post vou falar sobre UML.

Nenhum comentário: