quinta-feira, 30 de abril de 2020

Desenvolvimento Orientado a Objetos (OO)

Os primeiros conceitos da OO (orientação a objetos) surgiram no início da década de 1960. A linguagem Simula, desenvolvida na Noruega por Ole-Johan Dahl e Kristen Nygaard, possibilitava a modelagem de simulações. Os primeiros conceitos sobre objetos e classes surgiram dos projetos desenvolvidos em Simula. Na década de 1970, influenciada por essa linguagem, surgiu a SmallTalk, totalmente orientada a objetos. Entretanto, ela foi disponibilizada para o público somente a partir do início dos anos 1980. Nesse período, surgiram outras linguagens orientadas a objetos, tais como C++, derivada da linguagem C, ADA, Object Pascal e outras.

A linguagem Java é uma linguagem OO, tendo sido lançada em 1995 pela Sun MicroSystems. É uma das linguagens de programação OO mais amplamente utilizadas no mundo. Segundo Deitel e Deitel (2005).
Java é uma linguagem que possibilita a criação de páginas web com conteúdo dinâmico e interativo, o desenvolvimento de aplicativos corporativos de grande porte, o aprimoramento da funcionalidade de servidores web e o fornecimento de aplicativos para dispositivos voltados para consumo popular (por exemplo, celulares, smartphones e PDAs).
Para que se possa criar projetos e sistemas orientados a objetos, é necessário conhecer o processo de desenvolvimento da modelagem OO antes de iniciar a criação de códigos na linguagem Java. Assim, vamos conhecer um pouco sobre a evolução do desenvolvimento de sistemas.
Na década de 1960 não se utilizavam metodologias ou formalidades para a criação de documentos dos projetos de sistemas desenvolvidos. Entretanto, no final da década de 1970, surgiu a análise estruturada. Nessa metodologia, o objetivo do processo a ser informatizado está nas funções que agem sobre os dados. O principal diagrama utilizado nela é o diagrama de fluxo de dados (DFD). Na década de 1980, os autores Tom DeMarco e Chris Gane se destacaram ao escreverem algumas obras sobre a análise estruturada. Além deles, Edward Yourdon é uma referência muito importante sobre o assunto.

Na década de 1990, as metodologias OO começaram a surgir por causa da necessidade da criação de uma que pudesse atender às demandas dessas linguagens de programação.

De acordo com Blaha e Rumbaugh (2006), o termo orientado a objetos (OO) significa que organizamos o software como uma coleção de objetos distintos, que incorporam uma estrutura de dados e comportamentos.
A OO é uma metodologia utilizada para entender melhor os requisitos do cliente e solucionar os problemas com maior qualidade. A construção da modelagem OO se dá por meio de objetos, combinando estrutura de dados e comportamento. É um modo de pensar e não uma técnica de programação.
Brooks (1995) observa que a parte difícil do desenvolvimento de software é a manipulação de sua essência, por causa da complexidade inerente do problema, em vez das especificidades de seu mapeamento para uma linguagem em particular.

O desenvolvimento de software ocorre por meio de fases do ciclo de vida dele, como análise, projeto e implementação. Além disso, os conceitos e a notação OO são importantes para a elaboração da documentação de todo o processo de modelagem.

A abordagem de organização OO é essencialmente diferente do desenvolvimento tradicional de software, pois estruturas de dados e rotinas são desenvolvidas de forma apenas fracamente acopladas.
O paradigma OO tem como sua entidade essencial o objeto que recebe e envia mensagens, executa processamentos e pode mudar de estado. Problemas são resolvidos por meio de objetos enviando mensagens a objetos.

Na OO as funções e os dados são fundidos para formar a entidade objeto (object). Os objetos, diferentemente dos dados passivos das linguagens tradicionais, podem atuar. Suas ações são ativadas pelas mensagens enviadas e depois processadas por funções chamadas métodos (methods).
Uma coleção de objetos similares é chamada classe (class). Uma instância de uma classe é um objeto. A maior abstração é conseguida pelo uso da hierarquia de classes. Para reutilizar métodos, as hierarquias de classe recorrem ao mecanismo exclusivo da OO que é a herança (inheritance) ou hereditariedade.

Quando um programa OO é executado ocorrem 3 eventos:
  • Os objetos são criados de acordo com a necessidade;
  • As mensagens movimentam-se de um objeto para outro;
  • Quando os objetos não são mais necessários, eles são apagados, e a área na memória, recuperada.
O paradigma de orientação a objetos favorece a aplicação de diversos conceitos considerados fundamentais para o desenvolvimento de bons programas, tais como abstração (abstraction), encapsulamento (encapsulation), herança (inheritance) e polimorfismo (polymorphism). Alguns conceitos não são exclusivos desta abordagem, mas são suportados de forma melhor no desenvolvimento orientado a objetos do que em outras metodologias.
Técnicas de orientação a objetos promovem o compartilhamento de recursos em diversos níveis distintos. Herança de estruturas de dados e comportamento permite que estruturas comuns sejam compartilhadas entre diversas classes derivadas similares sem redundância. O compartilhamento de código usando herança é uma das grandes vantagens da orientação a objetos. Ainda mais importante que a economia de código é a clareza conceitual de reconhecer que operações sobre objetos diferentes podem ser a  mesma coisa, o que reduz o número de casos distintos que devem ser entendidos e analisados.
O desenvolvimento orientado a objetos não apenas permite que a informação dentro de um projeto seja compartilhada como também oferece a possibilidade de reaproveitar projetos e códigos em projetos futuros. As ferramentas para alcançar este compartilhamento, tais como abstração, encapsulamento, polimorfismo e herança, estão presentes na metodologia; uma estratégia de reuso entre projetos é a definição de bibliotecas de elementos reusáveis. Entretanto, orientação a objetos não é uma fórmula mágica para se alcançar reusabilidade; para tanto, é preciso planejamento e disciplina para se pensar em termos genéricos, não voltados simplesmente para a aplicação corrente.
Segundo Blaha e Rumbaugh (2006), a metodologia OO possui os seguintes estágios:
  • Concepção do sistema: os analistas de negócios ou usuários concebem uma aplicação e formulam os requisitos hipotéticos.
  • Análise: o analista examina e reespecifica rigorosamente os requisitos da concepção do sistema por meio da construção de modelos.
  • Projeto do sistema: a equipe de desenvolvimento planeja a arquitetura do sistema para solucionar o problema da aplicação. O projetista do sistema deve decidir que características de desempenho otimizar, escolher uma estratégia para atacar o problema e fazer alocações de recursos experimentais.
  • Projeto de classes: o projetista de classes elabora objetos tanto do domínio como de aplicação com os mesmos conceitos e notação de orientação a objetos. O foco do projeto de classes são as estruturas de dados e os algoritmos necessários para implementar cada classe.
  • Implementação: os implementadores traduzem as classes e os relacionamentos desenvolvidos durante o projeto de classes para linguagem de programação, banco de dados ou hardware específico.
Os conceitos OO aplicam-se por todo o ciclo de vida de desenvolvimento do sistema. Não se trata de um ciclo de vida do tipo cascata, mas de um processo interativo e incremental.

Blaha e Rumbaugh (2006) identificam algumas características importantes da OO, entre as quais podemos citar:
  • Ênfase na essência de um objeto: a OO enfatiza o que um objeto é, e não como ele é usado. O desenvolvimento OO dá uma ênfase maior à estrutura de dados e menor à de procedimentos.
  • Sinergia: identidade, classificação, polimorfismo e herança caracterizam as linguagens OO. Cada um desses conceitos pode ser usado isoladamente, mas juntos eles se complementam com sinergia. Esses conceitos são definidos pelos autores da seguinte forma:
    • Identidade: significa que os dados são quantizados em entidades distintas e distinguíveis, chamados objetos. Cada objeto tem sua própria identidade inerente.
    • Classificação: significa que os objetos com a mesma estrutura de dados (atributos) e comportamento (operações) são agrupados em uma classe. Esta é uma abstração que descreve propriedades importantes para uma aplicação e ignora as demais.
    • Herança: é o compartilhamento de atributos e operações (recursos) entre classes com base em um relacionamento hierárquico.
    • Polimorfismo: significa que a mesma operação pode se comportar de forma diferente para diferentes classes.
  • Abstração: permite que o programador se concentre nos aspectos essenciais de uma aplicação, ignorando os detalhes. Isso significa focalizar o que um objeto é e faz antes de decidir como implementá-lo. A capacidade de abstrair provavelmente é a habilidade mais importante exigida para o desenvolvimento OO.
  • Encapsulamento (ocultamento de informações): separa os aspectos externos de um objeto, que são acessíveis a outros objetos, dos detalhes internos da implementação, que estão escondidos deles. Pode-se mudar a implementação de um objeto sem afetar as aplicações que o utilizam.
  • Compartilhamento: as técnicas OO promovem compartilhamento em diferentes níveis. A herança tanto da estrutura de dados quanto do comportamento permite que as subclasses compartilhem um código comum. Esse compartilhamento via herança é uma das principais vantagens das linguagens OO.
  • Modelos: é uma abstração de algo com a finalidade de entendê-lo antes de construí-lo. As finalidades dos modelos são teste de uma entidade física antes de sua construção, comunicação com os clientes, visualização e redução da complexidade. A modelagem de um sistema se dá por meio de três modelos:
    • Modelo de classes: descreve a estrutura estática dos objetos em um sistema e seus relacionamentos. O modelo de classes define o contexto para o desenvolvimento de software.
    • Modelo de estados: descreve os aspectos de um objeto que mudam com o tempo.
    • Modelo de interações: descreve como os objetos em um sistema cooperam para conseguir resultados mais amplos.
    • Os três modelos são partes separadas da descrição de um sistema completo, mas estão interligados.

Nenhum comentário:

Postar um comentário