Curso de Verão de Java



Aula 1

Introdução à Programação Orientada a Objetos

Vocês já viram uma célula do tamanho de um golfinho ?


Para construir estruturas de extrema complexidade a natureza criou células, tecidos, órgãos, sistemas e organismos. Em uma maior escala estes organismos interagem com outros organismos criando populações e ecologias.

De forma similar e em menor escala o software é um artefato extremamente complexo. São necessários diversos níveis de organização para que qualquer software não trivial possa funcionar adequadamente.

Estas técnicas de organização de software são resultados de 50 anos de evolução da computação.

O Modelo de Computação de von Neumann (1940/1950)

O modelo de von Neumann, datado dos anos 40, é ainda amplamente utilizado.

Os principais pontos a destacar no modelo são:

Programação Estruturada (1960/1970)

Grandes disparidades de custos, prazos e qualidade com relação ao planejamento e implementação de software nos anos 60 e 70 causaram o surgimento a adoção do termo ENGENHARIA DE SOFTWARE.

Um movimento que ganhou impulso no final dos anos 70 foi a programação estruturada. Embora hoje pareça simplista a aplicação dos conceitos de SEQUÊNCIA, DESVIO e LAÇO, a adoção destes conceitos representou um grande avanço para a organização da programação em pequena escala.

Observações a respeito da programação estruturada:

Impacto de Modificações nos Requisitos do Software sobre Código e Dados

Depois de solucionado o problema do código "espaghetti" se descobriu que o código é a parte de um programa mais sujeito a variações.

Posta a regra geral:

por que insistir na modelagem orientada a processos?

O Modelo Entidade-Relacionamento (1970)

Maior ênfase na modelagem dos dados foi adotada pricipalmente depois da difusão do Modelo Entidade-Relacionamento, de Peter Chen. O MER foi a primeira notação de modelagem semântica de dados de grande sucesso.

Evolução da Topologia das Linguagens de Programação

A evolução dos conceitos e modelos de programação teve efeito direto na estruturação das linguagens de programação.

O Modelo de Objetos

Originalmente concebido para construir aplicações de simulação utilizando a linguagem Simula (1967), o modelo de objetos representa o mais destacado avanço de tecnologia de programação e desenvolvimento de software da atualidade. Hoje o modelo não é único e existem efetivamente milhares de pessoas trabalhando no seu uso e aperfeiçoamento. São muitos, e algumas vezes, mal-interpretados, os conceitos e terminologias adotados nas diversas variações do modelo.

Felizmente é possível começar a utilizar o modelo de objetos com um pequeno subconjunto destes elementos. Estes são:

Objetos, Métodos e Variáveis

Um OBJETO é um pacote de software contendo dados e procedimentos (código) relacionados. Os procedimentos são chamados MÉTODOS. Os dados dos objetos são chamados VARIÁVEIS ou COMPONENTES DO ESTADO.

Uma representação gráfica simplificada de objetos utiliza "doughnuts" ou simplesmente "donuts".

Agregação e Mensagens

As variáveis de um objeto são também objetos. A idéia de que o estado de um objeto é composto por outros objetos é bastante utilizada no mundo real e chamada no modelo de objetos de AGREGAÇÃO.

No exemplo acima o objeto avião pode invocar um método de seu sub-componente asa. A invocação de um método qualquer sobre um objeto é chamada de envio de MENSAGEM para o objeto.

Classes e Instâncias

Para tratar com várias ocorrências de um mesmo objeto se faz útil a noção de CLASSE de objetos. Classes são modelos que definem os métodos e as variáveis a serem incluídas em um tipo particular de objeto. Os objetos que pertencem a uma classe são chamados de INSTÂNCIAS desta classe e contêm valores particulares para as suas variáveis. As variáveis de um objeto são chamadas de VARIÁVEIS DE INSTÂNCIA em Smalltalk. Abaixo temos esqueletos de código que definem as classes dos objetos aviao, asa, propulsor e lemeDeDirecao da figura anterior.

class Aviao {

}

class Asa {

}

class Propulsor {

}

class LemeDeDirecao {

}

Herança

Herança é um mecanismo através do qual uma classe de objetos pode ser definida como caso especial de uma classe mais geral. Casos especiais de uma classe são chamados de SUBCLASSE. A classe mais geral é chamada de SUPERCLASSE. Estendendo o exemplo do avião temos agora dois tipos mais específicos de avião: AviaoDeGuerra e Ultraleve.

Polimorfismo

Polimorfismo permite que objetos sejam tratados de forma homogênea e segura um conjunto consistente de abstrações. INTERFACES em Java eliminam a necessidade de usar herança múltipla e deste modo solucionam problemas decorrentes do uso deste tipo de reuso. Veremos a aplicação destes conceitos no exemplo que se segue.

Suponha um Sistema de Controle de Universidade, onde professores, alunos, departamentos, cursos, disciplinas, etc, são organizados segundo o modelo de objetos. Um subconjunto das classes de pessoas que compõem o sistema (Pessoa, Professor, Aluno, AlunoPos, AlunoGraduacao, AlunoIC) ilustrado na figura abaixo. Observe que as classes Professor e AlunoIC declaram implementar a interface Remuneravel.

Parte das outras classes que formam o sistema (Departamento, Curso, Disciplina, SetorPagamento, SetorEventos e Convite) é ilustrada na figura abaixo.

Exercícios de Fixação


Jorge Fernandes, jhcf@di.ufpe.br
Última edição em 7 de janeiro de 1996.
URL: http://www.di.ufpe.br/~java/verao/aula1/aula1.html