Esse artigo faz parte da revista Engenharia de Software 8 edição especial. Clique aqui para ler todos os artigos desta edição

 

Projeto

Conceitos de orientação a objetos e UML

Entendendo o paradigma atual de desenvolvimento de sistemas

 

De que se trata o artigo:

Este artigo aborda a evolução do desenvolvimento de sistemas chegando aos dias de hoje com o paradigma da orientação a objetos. Em seguida são apresentados os conceitos da orientação a objetos, sua aplicabilidade em diversas fases do desenvolvimento de sistemas, e conclui com a apresentação da UML como modelo utilizado para desenvolvimento de sistemas OO.

Para que serve:

Fornecer aos desenvolvedores ou estudantes da área de sistemas a base necessária ao contexto de desenvolvimento atual o paradigma de orientação a objetos.

Em que situação o tema é útil:

Atualmente há uma disseminação de sistemas desenvolvidos sob o paradigma orientado a objetos, sem que alguns desenvolvedores tenham uma completa visão da importância de toda a base de conceitos OO e da modelagem em UML.

 

Este artigo inicia mostrando como evoluímos até o paradigma atual da orientação a objetos. Em seguida, conceituaremos a base da orientação a objetos, com sua demonstração por meio de exemplos. Será apresentada uma visão geral da aplicabilidade em diversas fases do desenvolvimento de sistemas: levantamento, análise, projeto de banco de dados e implementação. E por fim, evidenciaremos a proposta da UML como linguagem de modelagem, com a apresentação dos diagramas da versão atual.

O começo de tudo

A história da computação teve início na necessidade do homem em conseguir realizar cálculos. O caminho foi longo, iniciado com o ábaco, muitos anos antes da era cristã. A primeira máquina de calcular que apenas somava e subtraía vem surgir apenas em 1642, desenvolvida por Blaise Pascal. Em 1694, Gottfried Von Leibniz constrói a primeira calculadora que podia executar as quatro operações básicas, e em 1822, o matemático inglês Charles Babbage estabelecia os princípios do funcionamento dos computadores eletrônicos no projeto de sua máquina diferencial, capaz de realizar os cálculos necessários para elaborar uma tabela de logaritmos. A partir daí, outras invenções abriram caminhos para o que temos hoje. O marco inicial se dá com o primeiro computador eletrônico, o ENIAC (Eletrical Numerical Integrator and Calculator), surgido em 1945, e pesando cerca de 30 toneladas. Até hoje os computadores ainda utilizam a arquitetura proposta por Von Neumann. Em 1951, surgia o primeiro computador fabricado comercialmente: o UNIVAC I, usado no censo americano por 12 anos seguidos.

A partir da década de 40, descobre-se a importância da computação, e essa passa a fazer parte da nossa história. Contudo, numa primeira fase ninguém pensava em software. Os esforços estavam voltados à evolução do hardware, buscando-se reduzir os problemas das primeiras máquinas. Assim, da primeira geração de computadores à válvula, passamos para a segunda geração, utilizando transistores.

A primeira linguagem de programação surgida foi a linguagem de máquina, na década de 50 — o Assembly. Nesse momento, a preocupação era restrita aos comandos, nem se pensava em análise, muito menos em modelagem de requisitos. A partir de então, surgem as linguagens de alto nível, como Fortran, Algol e Cobol.

Um rápido aumento na complexidade das demandas por software e a falta de técnicas para definição de novos sistemas culminaram em diversos problemas, entre eles: estouro de orçamento e prazo, softwares de baixa qualidade, requisitos não atendidos e código de manutenção difícil. Estava definida a crise de software. A solução para contornar a crise veio com o conceito da Engenharia de Software, em 1968. Objetivava-se trazer os princípios da Engenharia, com todo o seu planejamento e modelagem, para se resolver os problemas da área ainda imatura. No mesmo ano de 68, Dijkstra escreve sobre a programação estruturada; tinha início o marco do primeiro paradigma de desenvolvimento de sistemas.

Mas enquanto novas linguagens surgiam —Pascal, C —, ainda não se tinha a definição de uma metodologia de desenvolvimento de sistemas, até 1978, quando Tom DeMarco escreve seu livro sobre análise estruturada. Contudo, a dificuldade de manutenção dos diversos modelos gerados na fase de análise e projeto, fez com que se percebesse, nas duas décadas seguintes, que esse paradigma ainda não era a solução para a velha crise de software.

Naturalmente, logo se pensa que a orientação a objetos surgiu após a análise estruturada, como uma evolução dessa metodologia, buscando-se as soluções necessárias para um projeto confiável e de manutenção fácil. É correto imaginar que o paradigma da orientação a objetos tornou-se a solução para acompanhar a demanda cada vez maior e freqüente do mercado, mas o erro está no posicionamento histórico do conceito de orientação a objetos, pois este surgiu muito antes do conceito da programação estruturada.

Em 1962, Ole-Johan Dahl e Kristen Nygaard criaram uma linguagem chamada Simula, baseada na linguagem Algol 60. O diferencial residia em seu objetivo: permitir o projeto de simulações. Surgia a primeira linguagem orientada a objetos, apresentando os conceitos de classe e herança. Essa foi a semente que inspirou o desenvolvimento de uma nova linguagem, a primeira totalmente orientada a objetos —o SmallTalk. Nela, não existem tipos primitivos, tudo é representado em forma de objeto: números, caracteres etc. Disponibilizada ao público no início dos anos 80, SmallTalk solidificou para a comunidade os conceitos de classe, objeto, atributo, método, encapsulamento, herança e mensagem. A partir daí, novas linguagens surgiram, como o C++ (versão OO da linguagem C), Object Pascal (versão OO do Pascal), Eiffel e Java (criado a partir do C++).

Conceitos fundamentais de orientação a objetos

Os conceitos da orientação a objetos surgiram da necessidade em se enfatizar unidades discretas, e obter a reutilização de código, mantendo-se a qualidade do software. O núcleo do pensamento OO predomina num foco sobre os dados, em vez dos processos, compondo módulos auto-suficientes — os objetos —, encerrando em sua estrutura todo o conhecimento dos dados e dos processos para manipulação desses dados.

O que se obtém de principal na modelagem orientada a objetos é a possibilidade de se abstrair diretamente os conceitos do mundo real, sem subterfúgios para se chegar à solução computacional.

Os conceitos fundamentais de orientação a objetos são o contrato que estabelece toda e qualquer implementação que se diga OO. Sendo assim, se um desses conceitos não for atendido, não podemos afirmar que determinada tecnologia possa ser nomeada como orientada a objetos. Isso aconteceu com a linguagem ...

Quer ler esse conteúdo completo? Tenha acesso completo