Buscar

Modelagem Orientada a Objetos - Volume 1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 84 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 84 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 84 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Recife, 2010
Modelagem 
Orientada a Objetos
Eduardo Araújo Oliveira
Patrícia Azevedo Tedesco
Volume 1
Universidade Federal Rural de Pernambuco
Reitor: Prof. Valmar Corrêa de Andrade
Vice-Reitor: Prof. Reginaldo Barros
Pró-Reitor de Administração: Prof. Francisco Fernando Ramos Carvalho
Pró-Reitor de Extensão: Prof. Paulo Donizeti Siepierski
Pró-Reitor de Pesquisa e Pós-Graduação: Prof. Fernando José Freire
Pró-Reitor de Planejamento: Prof. Rinaldo Luiz Caraciolo Ferreira
Pró-Reitora de Ensino de Graduação: Profª. Maria José de Sena
Coordenação Geral de Ensino a Distância: Profª Marizete Silva Santos
Produção Gráfica e Editorial
Capa e Editoração: Allyson Vila Nova, Rafael Lira, Italo Amorim, Arlinda Torres e Gláucia Fagundes
Revisão Ortográfica: Marcelo Melo
Ilustrações: Glaydson da Silva
Coordenação de Produção: Marizete Silva Santos
Sumário
Apresentação ...................................................................................................4
Conhecendo o Volume 1 .................................................................................5
Capítulo 1 - Modelagem Conceitual: Abstração X Representação .............7
Capítulo 2 - Uma Introdução à Ideia de Objetos .........................................15
Capítulo 3 - O Paradigma OO e a Linguagem UML .....................................39
Capítulo 4 - Programando de acordo com o Paradigma POO ...................49
Considerações Finais ....................................................................................82
Conhecendo os Autores ................................................................................84
Apresentação
Caro(a) Cursista,
Bem-vindo(a) à disciplina Modelagem Orientada a Objetos! O objetivo principal 
desta disciplina é apresentar a você os principais conceitos que fundamentam a 
Modelagem Conceitual, em particular a Modelagem Orientada a Objetos. A partir daí, 
vamos trabalhar juntos para que você possa, neste primeiro momento, modelar soluções 
para problemas de complexidade mediada e também implementá-los. E ai, vamos juntos 
enfrentar estes desafios?
Para tornar o nosso estudo mais agradável e proveitoso, preparamos diversas 
atividades e materiais que veremos juntos(as) ao longo desta disciplina. Vale ressaltar 
que o sucesso da nossa disciplina depende muito de você! Além do material que você 
vai encontrar nos livros impressos e no ambiente, nós contamos com a sua colaboração 
para trazer questionamentos e materiais que você encontrar em suas pesquisas para 
enriquecermos ainda mais o nosso trabalho. 
O material disponível nesta disciplina servirá para nos ajudar a refletir sobre a 
Modelagem orientada a objetos, e como você poderá utilizá-la para criar soluções para 
os problemas que enfrentará ao longo de sua vida profissional. Assim, neste primeiro 
módulo, vamos discutir um pouco sobre Modelagem conceitual, em particular sobre a 
modelagem OO. Vamos também aprender juntos sobre a linguagem UML (a linguagem 
mais utilizada na atualidade para modelar sistemas Orientados a Objetos). Além disto, 
para praticar um pouco, vamos também ver a ferramenta Joice, que vai nos ajudar na 
modelagem UML. Por fim, ainda neste módulo, vamos estudar em detalhes os conceitos 
de classes e objetos.
Já no segundo módulo desta disciplina, vamos refletir com detalhes sobre o 
modelo OO. Em particular, vamos conhecer os conceitos de encapsulamento, herança 
e polimorfismo, que fazem deste modelo uma alternativa flexível e adequada aos 
ambientes dinâmicos para os quais temos que apresentar soluções de software. Os 
módulos três e quatro nos trazem o lado mais prático desta disciplina. Neles vamos 
estudar a Linguagem Java – bastante utilizada na atualidade e praticar bastante como 
implementar as soluções que aprendemos a modelar nos módulos anteriores da 
disciplina.
Esperamos que você se sinta motivado(a) a embarcar nesta viagem, rumos aos 
desafios da Orientação a Objetos. Vamos juntos(as) aprender a criar soluções com o 
auxílio da modelagem OO. Então, pronto(a) para iniciar a viagem?
Sucesso nos estudos!
Eduardo Oliveira, Patrícia Tedesco 
Professores Autores
Conhecendo o Volume 1
Neste primeiro volume, você irá encontrar o Módulo 1 da disciplina Modelagem 
Orientada a Objetos.
Para facilitar seus estudos, veja a organização deste primeiro módulo.
Módulo 1 – Introdução à Modelagem Orientada a Objetos
Objetivo do Módulo 1
» Apresentar os conceitos teóricos fundamentais da Modelagem Orientada a 
Objetos, promovendo uma reflexão sobre os componentes do Modelo orientado a 
objetos.
Carga horária do Módulo 1: 15h
Conteúdo Programático do Módulo 1
» Modelagem conceitual: Abstração X Representação
» Histórico das Linguagens de Programação OO
» O Modelo de Objetos: Classes e Objetos, Comunicação por troca de mensagens. 
» Classes e Objetos em Detalhes
6
Modelagem Orientada a Objetos
Capítulo 1
O que vamos estudar neste capítulo?
Objetivos
Neste capítulo, vamos estudar os seguintes temas:
» Modelagem conceitual: Abstração X Representação
Metas
Após o estudo deste capítulo, esperamos que você consiga:
» Identificar o que é abstração 
» Perceber a importância da abstração na orientação a objetos
7
Modelagem Orientada a Objetos
Capítulo 1 - Modelagem 
Conceitual: Abstração X 
Representação
Vamos conversar sobre o assunto?
Olá, seja bem vindo(a) ao curso de Modelagem Orientada a 
Objetos!
Antes de passar a discutir a ideia de modelagem Orientada a 
Objetos (daqui para frente, chamada de modelagem OO) propriamente 
dita, que tal darmos uma olhada no conceito de Programação 
Orientada a Objetos? 
Até o momento, aprendemos como escrever algoritmos através 
de suas várias representações e, adotamos a linguagem C, que é 
uma linguagem estruturada, imperativa, procedural, de alto nível, e 
padronizada como linguagem de programação. No entanto, como 
vimos nas disciplinas anteriores, o problema com a modelagem 
estruturada é que muitas vezes criamos programas que são difíceis 
de manter, e também de reaproveitar. Isto pode ser um enorme 
problema na atualidade, onde convivemos com ambientes cada vez 
mais dinâmicos, e que requerem soluções complexas. 
Vamos refletir um pouco sobre o que fizemos nas disciplinas 
anteriores de programação? Nas disciplinas anteriores, criamos 
softwares de pequeno porte, isto é, que não possuíam muitas 
linhas de código. Cada vez que escrevemos um programa, estamos 
interessados mais em fazer a coisa funcionar, e menos no que 
poderia acontecer no futuro (em outras palavras, não estávamos 
muito interessados em responder a questões como: será que a gente 
ia precisar reutilizar o programa? Seria preciso adaptar os requisitos 
do projeto no futuro? Poderia ser interessante ampliar o alcance do 
sistema produzido?). Para facilitar este processo, é preciso, antes de 
codificar de verdade, fazer um exercício de modelagem dos sistemas 
que queremos produzir. A ideia aqui é a seguinte: antes de codificar 
de verdade, temos que pensar (com calma) nos componentes mais 
importantes de cada sistema que vamos construir, e em como eles se 
comunicam. Mas, como fazer isto?
8
Modelagem Orientada a Objetos
Assim, na próxima seção vamos discutir a ideia de modelagem 
conceitual em maiores detalhes. 
Modelagem Conceitual e Abstração
Dentre os paradigmas existentes, a Orientação a Objetos destaca-
se pelo ní vel de abstração. Os elementos do mundo real são 
modelados como objetos no mundo computacional. Os objetos, por 
sua vez, possuem propriedades e comportamento, assim como no 
mundo real. Por exemplo, se tivéssemos que construir uma aplicação 
bancária (daquelas que executam nos caixas eletrônicos que usamos 
para sacar dinheiro), poderíamos pensar que as contas-corrente 
seriam um objeto. Associadas a cada conta teríamos propriedades 
como titular, saldo, linhas de crédito, cartões, senha, etc... E ao 
comportamento, estariam associadas todas as operações costumeiras 
sobre contas, como saques, depósitos, extratos, etc... E por fim,o código desenvolvido utilizando o paradigma OO (Orientação a 
Objetos) expressa a solução em termos mais próximos do problema.
Abstração é a habilidade de concentrar nos aspectos essenciais de 
um contexto qualquer, ignorando caracterí sticas menos importantes ou 
acidentais. Por exemplo, em uma aplicação de controle acadêmico, se 
quiséssemos modelar alunos da UAB/UFRPE, aspectos importantes 
seriam número de matrícula, CPF, disciplinas cursadas, etc... Já 
aspectos como esportes que pratica, número de filhos, número de 
camisas no guarda-roupas poderiam ser deixados de lado. Assim, 
usando a abstração, podemos focar apenas nos aspectos relevantes 
para a construção de um determinado sistema de software.
9
Modelagem Orientada a Objetos
Em modelagem orientada a objetos, uma classe é uma abstração 
de entidades existentes no domí nio do sistema de software. Em 
outras palavras, uma classe agrupa entidades que têm características 
semelhantes. Podemos também pensar em classes e subclasses 
(que agrupariam entidades com características específicas de uma 
classe) Por exemplo, vamos imaginar uma abstração referente a uma 
classe de Funcionários de uma empresa. Esta classe é sub-classe de 
uma classe Pessoa (pois os funcionários têm nome, idade, CPF, sexo, 
estado civil, ...), e teria sub-classes como Diretor, Operador, Caixa, 
Vendedor e outros (que seriam os tipos de funcionários).
Abstração pode ser vista como a habilidade de modelar 
características do mundo real do problema que o programador esteja 
tentando resolver. Por exemplo, se você, programador, estiver 
desenvolvendo um sistema de controle acadêmico, é muito melhor 
dispor de uma linguagem que te permita criar algo conhecido como 
“aluno” (e obviamente ofereça também mecanismos para criar rotinas 
que implementem o comportamento desta entidade) ao invés de 
recorrer a estruturas de dados tipo array ou record. Nesse contexto, a 
abstração refere-se à capacidade de modelar o mundo real, restringindo 
o nosso universo de análise e desprezando as propriedades que 
não são relevantes para a solução sendo construída. Em termos de 
desenvolvimento de sistemas, a abstração significa concentrar-se no 
que um objeto é e faz antes de decidir como ele será implementado. 
O uso de abstração preserva a liberdade para tomar decisões de 
desenvolvimento ou de implementação apenas quando há um melhor 
entendimento do problema a ser resolvido. O uso apropriado de 
abstração permite que um mesmo modelo conceitual (orientação a 
objetos) seja utilizado para todas as fases de desenvolvimento de um 
sistema, desde sua análise até sua documentação. 
Segundo o dicionário Priberam, da língua portuguesa, a definição 
do verbo abstrair nos diz:
abstrair
Conjugar 
do Lat. abstrahere
v. tr., 
fazer abstracção; 
separar mentalmente (as qualidades ou propriedades dos seres); 
afastar, desprezar;
v. int., 
10
Modelagem Orientada a Objetos
considerar isoladamente; 
simplificar;
v. refl., 
distrair-se; 
alhear-se; 
concentrar-se, absorver-se.
E o substantivo abstração:
abstracção
do Lat. abstractione
s. f., 
acção de abstrair; 
separação mental de uma das partes de um todo; 
estado da pessoa absorta em profunda meditação, contemplação, êxtase, 
enlevo; 
distracção; 
hipótese.
Orientação a objetos é um modelo ou uma forma para se 
desenvolver programas onde a gente trata as partes do sistema como 
elementos do mundo real. Aproveitando o exemplo citado acima e o 
relacionando ao mundo real, nós somos instâncias da classe Pessoa. 
Pessoas têm características comuns. Todos têm nome, sexo, cor 
de pele, cor de olhos e cabelos, altura, e outros. O que precisamos 
identificar é se, para determinado problema que buscamos solucionar, 
a exemplo de um sistema de locação de vídeos, precisaremos de 
informações como a cor dos cabelos ou dos olhos do usuário. Isto é 
abstração! Esqueça informações irrelevantes para seu programa. Se a 
orientação a objetos diz que devemos programar as coisas como são 
no mundo real, a abstração, que é uma de suas bases, diz: “mas não 
exagere, o mundo real é um sistema muito mais complexo que o 
cadastro de usuários em seu sistema”. Devemos criar objetos, mas 
estes precisam ser coerentes com o universo do sistema em questão. 
A Figura 1 ilustra a ideia apresentada até aqui.
Figura 1. Modelo conceitual
11
Modelagem Orientada a Objetos
Conheça Mais
Você pode aprofundar os conhecimentos básicos sobre modelagem 
conceitual e abstração através da leitura dos livros:
 DEITEL, M. D.; DEITEL, P. J.: C++: Como Programar. 5a. 
Edição. Pearson. 2006.
 CORNEL, G., HORSTMANN C. S.: Core Java 2. Fundamentos. 
7a Edição. Alta Books. 2005.
 ARNOLD, KEN; GOSLING, JAMES: A Linguagem de 
Programação Java. 4a. Edição.Bookman.2007.
Acesse também comunidades virtuais de discussão sobre a 
orientação a objetos e o Java:
 http://www.portaljava.com
 http://www.guj.com.br
 http://www.javafree.com.br
Aprenda Praticando
Para vermos melhor como funciona esta ideia de abstração e 
modelagem, vamos discutir alguns exemplos?
Suponha que fomos contratados para criar uma agenda de contatos 
para uma loja. Esta loja pode ter diferentes tipos de contatos. A 
agenda deve ainda permitir o cadastro, remoção e atualização dos 
contatos no sistema.
Solução
Para o nosso problema, que é o desenvolvimento de uma agenda 
de contatos, com o que precisamos realmente nos preocupar? Vamos 
abstrair e pensar...
Precisamos guardar informações sobre nome, email, telefone, 
endereço e data de aniversário. Informações sobre altura da pessoa, 
o peso da pessoa, se ela possui animais domésticos, a cor dos olhos 
12
Modelagem Orientada a Objetos
e cabelos, e outras informações são necessárias? Podemos abstraí-
las?
Pensemos mais. Como se trata de uma agenda para uma loja, 
podemos ter tipos de contatos em nossa agenda. Para este caso, 
poderíamos pensar em algo como: geral, cliente ou fornecedor. No 
caso de fornecedores poderíamos ter atributos que indicassem a 
qualidade do fornecedor (para o caso de haver mais de um fornecendo 
um mesmo item). No caso dos clientes, poderíamos manter um registro 
da data da última compra e também uma indicação do tipo do cliente 
(fiel, frequente, pouco frequente e apenas uma vez). E no caso de ser 
um contato geral, simplesmente teríamos os dados que já pensamos 
antes (nome, email, telefone, endereço e data de aniversário). Percebe 
que devemos abstrair e entender o problema de forma a simplificá-
lo? Temos que focar em nosso objetivo principal, sem tornar mais 
complexa nossa solução. Temos de pensar no essencial.
A forma como iremos inserir, remover e atualizar dados dentro do 
sistema fica a critério de cada desenvolvedor. Isto é um detalhe de 
implementação, que pode ser feito de diversas maneiras (utilizando 
XML, arquivos, banco de dados, estrutura de lista, etc...). 
Atividades e Orientações de Estudo
No final deste capítulo, vamos exercitar o conceito de abstração, 
e refletir um pouco sobre a sua utilidade. Para isto, vamos realizar 
duas atividades: uma atividade de pesquisa e uma de interação. Não 
esqueça que quaisquer duvidas que forem aparecendo, você pode 
tirar no fórum com o seu tutor/professor, ok? É muitíssimo importante 
não esquecer nunca que mesmo a distância, você não está sozinho. 
A distância é apenas física.
Atividades de Pesquisa
Continue pesquisando sobre o assunto. Quanto mais você ler 
agora, melhor será sua base em orientação a objetos e mais fácil será 
o aprendizado na linguagem de programação Java no futuro.
13
Modelagem Orientada a Objetos
Bibliografia recomendada para iniciantes em orientação a objetos 
e na plataforma Java.
 Java - Como programar, de Harvey M. Deitel
 Use a cabeça! - Java, de Bert Bates e Kathy Sierra
 (Avançado) Effective Java Programming Language Guide - 2nd 
edition, de Joshua Bloch
Atividades de Interação
Agora que a gente já viu e pesquisou outros recursos para podermos 
consolidar o conceito de abstração, que tal compartilhar com o grupoos resultados obtidos? Em grupos de três pessoas, preparem uma 
pequena apresentação PowerPoint (ou software equivalente) sobre a 
ideia de abstração. Cada apresentação deve conter dois exemplos 
de aplicação, e uma pequena discussão sobre as vantagens (e 
dificuldades) de refletir sobre os conceitos relevantes de um sistema 
antes de codificá-lo. As apresentações devem ser postas no fórum, e 
cada equipe deve comentar as dos colegas também.
Vamos Revisar?
Resumo
Você estudou, neste capítulo, a noção de abstração, e sua importância na 
construção de sistemas que tem sido cada vez mais complexos. Também 
conseguiu ver que a ideia central na construção deste tipo de sistema, diferente 
do que fazíamos no paradigma procedural tradicional, é dar importância 
ao comportamento de cada componente, e fazer isto de forma a aproveitar 
componentes que construímos. Conseguiu perceber que programar, agora, 
envolve muito mais do que simplesmente codificar!
14
Modelagem Orientada a Objetos
Capítulo 2
O que vamos estudar neste capítulo?
Objetivos
Neste capítulo, vamos estudar os seguintes temas:
» Introdução à Ideia de Objetos
» O Modelo de Objetos: Classes e Objetos, Comunicação por 
troca de mensagens
» Objetos
» Classes
» Atributos
» Métodos
Metas
Após o estudo deste capítulo, esperamos que você consiga:
» Aprender os conceitos básicos da Orientação a Objetos
» Aprender o que são objetos
» Aprender o que são classes
» Identificar estado, comportamento e identidade de objetos
» Entender o que são métodos e atributos
15
Modelagem Orientada a Objetos
Capítulo 2 - Uma Introdução à 
Ideia de Objetos
Vamos conversar sobre o assunto?
Orientação a objetos é uma maneira de programar que ajuda na 
organização e resolve muitos problemas enfrentados pela programação 
procedural. Por exemplo, muitas vezes fica difícil reutilizar o código 
que a gente já fez. Vamos parar para pensar um pouquinho. Lembra 
dos procedimentos de entrada de dados que você fez ao longo das 
disciplinas de Programação? Os procedimentos não são parecidos? 
Não seria bom que a gente pudesse reaproveitá-los? Vamos ver, ao 
longo desta disciplina, que a programação orientada a objetos pode 
nos ajudar com muitos problemas que enfrentamos quando estamos 
programando (até então, pensemos na programação procedural).
A orientação a objetos é também conhecida como Programação 
Orientada a Objetos (POO) ou ainda em inglês Object-Oriented 
Programming (OOP). A POO é uma metodologia de programação 
adequada ao desenvolvimento de sistemas de pequeno, médio ou 
grande porte, provendo modularidade e reusabilidade [SOBRAL, 
2009]. A POO introduz uma abordagem na qual o programador 
visualiza seu programa em execução como uma coleção de objetos 
cooperantes que se comunicam através de mensagens. 
Segundo Sobral [SOBRAL, 2009], existem alguns aspectos 
importantes na definição de POO:
» A POO utiliza objetos e não funções ou procedimentos como 
seu bloco lógico fundamental de construção de programas.
» Objetos comunicam-se através de mensagens.
» Cada objeto é instância de uma classe
○ Modelamos classes, e não objetos
○ Objetos são entidades reais – executam algum papel no 
sistema
○ Classes são abstrações – capturam a estrutura e 
comportamento comum a um conjunto de objetos.
16
Modelagem Orientada a Objetos
» Classes estão relacionadas com as outras via mecanismos de 
herança 
○ São formadas hierarquias de classes
○ “Filhos” (ou subclasses) herdam estrutura e comportamento 
dos “pais” (ou superclasses) e demais “ancestrais”, de forma 
indireta
○ A herança possibilita
▪ Reutilização
▪ Captura explícita de características comuns
Em linguagens procedurais tradicionais, a importância maior é 
atribuída a processos, e sua implementação em subprogramas. Em 
uma linguagem como C, procedimentos ativos agem sobre dados 
passivos que foram passados a eles. Em linguagens orientadas a 
objetos, ao invés de passar dados a procedimentos, requisita-se que 
objetos realizem operações neles próprios [SOBRAL, 2009]. Alguns 
aspectos são fundamentais na definição de programação orientada 
a objetos, que serão esclarecidos em maiores detalhes no decorrer 
deste volume.
» Abstração de dados
» Objetos
» Classes
» Comunicação por troca de mensagens
» Herança e Polimorfismo
Todos estes conceitos serão vistos em detalhes no decorrer da 
disciplina.
17
Modelagem Orientada a Objetos
O Modelo de Objetos: Classes e Objetos, 
Comunicação por troca de mensagens
Até agora, quando pensávamos em desenvolvimento de software, vinha logo à 
mente a ideia de decompor os programas em diversos módulos e dividir cada 
módulo em funções e procedimentos. Muitos programadores já pensaram 
em dividir para conquistar. As funções e procedimentos (ou módulos) são 
responsáveis por solucionar partes do problema do software, como já vimos em 
disciplinas anteriores.
A orientação a objetos é uma tecnologia de desenvolvimento composta por 
metodologias e linguagens usadas na análise, no projeto e na implementação 
de programas. Apesar de existir a décadas, só recentemente (final da década de 
90) a orientação a objetos ganhou popularidade. Na verdade, isto aconteceu à 
medida em que os ambientes ficavam cada vez mais complexos, e que o volume 
de informações que os programas precisavam tratar ficava maior. De fato, era 
preciso encontrar formas de escrever programas que pudessem ser reutilizados, 
e que facilitassem a manutenção de código (à medida em que as informações 
se disponibilizam, os requisitos das aplicações se modificam ao longo do tempo 
– daí a importância em modularizar o código, para facilitar seu entendimento e 
suas futuras manutenções).
Em parte esta popularidade decorre do uso crescente de interfaces gráficas 
e da arquitetura distribuída dos programas atuais, características que são 
adequadamente apoiadas pela orientação a objetos. 
Os programas desenvolvidos utilizando-se de orientação a objetos são compostos 
por módulos e estes módulos são os “objetos” e, em cada um deles, temos dados 
e funções. As funções são os “métodos” e contém o código responsável pelos 
serviços providos pelos objetos. Perceba que na orientação a objetos não temos 
o conceito de procedimentos e funções. Temos apenas os métodos (que podem 
ou não ter tipo de retorno e receber quantos parâmetros forem necessários). Os 
dados, por sua vez, só podem ser acessados através do código presente nos 
métodos do objeto. Por este motivo, os dados são ditos encapsulados.
Fernando Albuquerque.
A orientação a objetos encapsula dados (atributos) e métodos 
(comportamentos) em objetos; os dados e métodos de um objeto 
estão intimamente amarrados entre si. Por enquanto, vamos pensar 
em atributos como variáveis e em métodos como funções, depois 
aprofundaremos estes conceitos. Mas, o que quer dizer ‘encapsula 
dados e métodos em objetos’?
Os objetos têm a propriedade de ocultar informações. Apesar de 
poderem se comunicar, os objetos normalmente não têm permissão 
para conhecer os outros objetos implementados – detalhes da 
implementação são ocultos dentro dos próprios objetos [DEITEL, 
2006]. Tome como exemplo a seguinte situação: Podemos utilizar 
um computador sem saber detalhes de sistemas de transmissão 
e comunicação de dados, protocolos de comunicação e outros 
18
Modelagem Orientada a Objetos
internamente. Outro exemplo é em relação ao carro. Podemos dirigi-lo 
sem ter conhecimento sobre detalhes do câmbio, sobre detalhes 
específicos do motor, sobre troca de combustível ou outras informações. 
Estas informações estão encapsuladas para os usuários. Entendeu 
agora o que quisemos dizer com ‘encapsula dados e métodos em 
objetos’? Você consegue perceber outros exemplos de objetos de 
nosso cotidiano que possuem encapsulamento de informações?
Vamos agora, enfim, conhecer um pouco mais sobre os objetos.
Objetos
Praticamente TUDO pode ser considerado como um objeto. 
Elementos como pessoas, organizações, máquinas, animais ou 
eventos podem ser consideradosobjetos. Um objeto denota uma 
entidade, seja ela de natureza física, conceitual ou de software.
Exemplos de objetos:
» Entidades físicas: um carro, uma pessoa, uma casa
» Entidade conceitual: um organograma de uma empresa
» Entidade de software: um botão em uma GUI (Graphical User 
Interface)
Um objeto é uma entidade capaz de reter um estado (informação/
atributos/propriedades) e que oferece uma série de operações 
(comportamentos/métodos) ou para examinar ou para afetar este 
estado [CASTRO, 2009]. Outra definição para objeto poderia ser: 
uma unidade dinâmica, composta por um estado interno privativo 
(estrutura de dados) e um comportamento (conjunto de operações). 
Segundo PRICE, um objeto em particular é como um processador 
com memória própria e independente de outros objetos. Em termos 
de implementação, objeto é um bloco de dados privados envolvidos 
por código, de maneira que o acesso a ele só pode ser feito sob 
condições especiais.
Como já discutimos anteriormente, o comportamento de um objeto 
é descrito através de rotinas que manipulam seus dados, sendo que o 
seu estado corrente está em seus próprios dados; em outras palavras, 
cada objeto tem suas próprias características, moldadas a partir de 
uma matriz, a classe. Se pensarmos em um banco, podemos ter dois 
exemplos de classe. Uma classe representando as contas de um 
19
Modelagem Orientada a Objetos
banco e outra classe representando os clientes do banco. A classe 
Conta, que é um objeto, poderia ter atributos como saldo, limite, dono 
da conta, numero da conta e realizar comportamentos (métodos) 
como sacar valores, transferir valores e depositar valores. No caso do 
Cliente, poderia ser representado com atributos como nome, endereço 
e CPF. A troca de mensagem é justamente a chamada a um objeto 
para acessar um de seus métodos, ativando um comportamento 
descrito por sua classe. No caso, se um objeto do tipo Cliente 
acessa um método da classe Conta para sacar valores, os objetos 
estão trocando mensagens. A troca de mensagens também pode ser 
direcionada diretamente a uma classe (através de uma invocação a 
um método estático, conforme veremos no decorrer do curso). Este 
relacionamento entre conta e cliente é exemplificado através da Figura 
2.
Por enquanto, perceba apenas as duas classes representando 
(abstração) uma conta e um cliente. Depois explicaremos esta 
representação gráfica em maiores detalhes.
Figura 2. Relacionamento entre a classe Conta e a classe Cliente
Um objeto é composto de estado, comportamento e identidade 
[CASTRO, 2009]. 
» Estado: são as informações, estruturas de dados que 
representam o estado interno do objeto. Em geral, não são 
acessíveis aos demais objetos. Representa uma das possíveis 
condições em que um objeto pode existir.
○ O estado é representado pelos valores das propriedades de 
um objeto em um determinado instante
▪ Exemplo (Aluno Eduardo):
20
Modelagem Orientada a Objetos
▪ Nome: Eduardo
▪ Matrícula: 301182
▪ Semestre de Ingresso: 20101X
▪ Exemplo (Conta bancária)
▪ Saldo: R$510,00
▪ Limite: R$200,00
▪ Numero Conta: 03098-4
▪ Dono Conta: Antonio
» Comportamento: o comportamento de um determinado objeto é 
definido por conjunto de operações, chamadas de métodos, que 
agem sobre os estados internos dos objetos. Os métodos são 
ativados (disparados) quando o objeto recebe uma mensagem 
solicitando sua execução. O comportamento determina como 
um objeto pode responder a interações mediante a ativação 
de operações decorrentes de mensagens recebidas de outros 
objetos. Por exemplo, toda vez que você vai ao caixa eletrônico 
do seu banco fazer um saque, o objeto conta bancária recebe 
uma mensagem indicando que ele deve atualizar seu saldo 
(subtraindo o valor que você acabou de sacar). Ao receber 
esta mensagem, o objeto ativa o método ‘atualizar saldo’, que 
cuida de fazer esta atualização. O interessante disto é que a 
forma como a atualização é feita não precisa ser conhecida 
por ninguém, então a gente pode atualizar este método, se for 
necessário, e nenhuma outra parte do sistema será afetada. 
Esta atualização pode ser realizada graças ao conceito de 
herança1, que é o mecanismo pelo qual uma classe (subclasse 
– a classe que irá estender a superclasse para utilizar o método 
‘atualizar saldo’, quem irá chamá-lo – este passo é conhecido 
nosso, já realizamos chamadas a funções de programas C – isto 
é semelhante a chamadas de métodos agora) pode estender 
outra classe (superclasse - no nosso caso, a superclasse seria 
quem possui o método ‘atualizar saldo’), aproveitando seus 
comportamentos (métodos) e variáveis possíveis (atributos). Os 
atributos e métodos somente podem ser manipulados através 
das operações definidas na interface2 do objeto, de modo que a 
forma de armazenamento das propriedades e a implementação 
Saiba Mais
1 Herança - A 
Herança é um 
princípio da POO 
que permite 
que as classes 
compartilhem 
atributos e 
operações 
(métodos - 
comportamentos) 
baseados em um 
relacionamento, 
geralmente 
generalização. A 
herança permite 
a criação de 
subclasses que 
herdam alguns 
dos atributos e 
das operações 
da classe pai 
(superclasse). 
A herança é 
utilizada com 
o objetivo de 
reaproveitar 
código ou 
comportamento 
generalizado 
ou especializar 
operações 
ou atributos 
[Wikipedia].
21
Modelagem Orientada a Objetos
▪ Nome: Eduardo
▪ Matrícula: 301182
▪ Semestre de Ingresso: 20101X
▪ Exemplo (Conta bancária)
▪ Saldo: R$510,00
▪ Limite: R$200,00
▪ Numero Conta: 03098-4
▪ Dono Conta: Antonio
» Comportamento: o comportamento de um determinado objeto é 
definido por conjunto de operações, chamadas de métodos, que 
agem sobre os estados internos dos objetos. Os métodos são 
ativados (disparados) quando o objeto recebe uma mensagem 
solicitando sua execução. O comportamento determina como 
um objeto pode responder a interações mediante a ativação 
de operações decorrentes de mensagens recebidas de outros 
objetos. Por exemplo, toda vez que você vai ao caixa eletrônico 
do seu banco fazer um saque, o objeto conta bancária recebe 
uma mensagem indicando que ele deve atualizar seu saldo 
(subtraindo o valor que você acabou de sacar). Ao receber 
esta mensagem, o objeto ativa o método ‘atualizar saldo’, que 
cuida de fazer esta atualização. O interessante disto é que a 
forma como a atualização é feita não precisa ser conhecida 
por ninguém, então a gente pode atualizar este método, se for 
necessário, e nenhuma outra parte do sistema será afetada. 
Esta atualização pode ser realizada graças ao conceito de 
herança1, que é o mecanismo pelo qual uma classe (subclasse 
– a classe que irá estender a superclasse para utilizar o método 
‘atualizar saldo’, quem irá chamá-lo – este passo é conhecido 
nosso, já realizamos chamadas a funções de programas C – isto 
é semelhante a chamadas de métodos agora) pode estender 
outra classe (superclasse - no nosso caso, a superclasse seria 
quem possui o método ‘atualizar saldo’), aproveitando seus 
comportamentos (métodos) e variáveis possíveis (atributos). Os 
atributos e métodos somente podem ser manipulados através 
das operações definidas na interface2 do objeto, de modo que a 
forma de armazenamento das propriedades e a implementação 
Saiba Mais
2Segundo o 
próprio site da 
Sun (http://java.
sun.com/docs/
books/tutorial/
java/concepts/), 
“uma interface 
é um contrato 
entre a classe 
e o mundo 
externo. Quando 
uma classe 
implementa uma 
interface, ela está 
comprometida 
a fornecer o 
comportamento 
publicado pela 
interface”.
das operações são desconhecidas pelas outras entidades 
externas (encapsulamento de informações).
O Comportamento é determinado pelo conjunto de operações que 
o objeto pode realizar. São os métodos da classe (semelhante as 
funções em C, como já vimos).
▪ Exemplo (Controle Acadêmico)
▪ Eduardo
▪ Solicitar matrícula
▪ Retorna: 301182
▪ Exemplo (Conta)
▪ Realizar um saque em conta de R$50,00 ou,
▪ Realizar uma transferência ou,
▪ Realizar um depósito» Identidade: é uma propriedade que diferencia um objeto de 
outro; ou seja, seu nome.
▪ Eduardo (objeto - representação/abstração de um aluno)
▪ Controle Acadêmico (Sistema que está sendo construído)
▪ Semestre (estado)
▪ Matrícula 301182 (Propriedade de um aluno)
A Figura 3 nos mostra como representar objetos graficamente. 
Em breve discutiremos esta representação e algumas outras em 
maiores detalhes. Conheceremos ainda um pouco sobre a Linguagem 
UML3 (Unified Modeling Language), que é uma das linguagens mais 
utilizadas atualmente para a representação gráfica de modelagem de 
sistemas.
Hiperlink
3 UML – http://
www.uml.org
22
Modelagem Orientada a Objetos
Figura 3. Notação utilizada para representação de objetos
Os atributos e métodos de uma classe podem ter vários graus de 
visibilidade (acesso a partir de entidades externas). Para representar 
a visibilidade dos atributos e operações (métodos) em uma classe 
utiliza-se as seguintes marcas e significados:
» + (público) - visível em qualquer classe 
○ Visível a todos. Qualquer outra classe tem acesso a um 
atributo ou método publico. 
» # (protegido) - qualquer descendente pode usar
○ Se uma classe herdar outra, esta subclasse terá acesso aos 
atributos e métodos públicos da superclasse
» - (privado) - visível somente dentro da classe4
○ Os atributos e métodos são visíveis apenas pela classe que 
os possui. Se uma subclasse tenta acessar um atributo ou 
método privado de uma superclasse, esta tentativa será 
considerada erro de sintaxe.
Nota
No decorrer deste fascículo, entraremos em maiores detalhes sobre 
as permissões e visibilidades dos atributos e métodos. Você terá ainda 
oportunidade de se aprofundar neste assunto quando iniciar a leitura do 
volume 2, onde teremos um capítulo inteiro voltado ao encapsulamento de 
informações.
Enquanto que os conceitos de dados e procedimentos são 
frequentemente tratados separadamente nas linguagens de 
programação tradicionais, em POO eles são reunidos em uma única 
Saiba Mais
4 O acesso a 
dados private de 
uma classe pode 
ser fornecido 
através de 
métodos get 
(métodos de 
acesso) e podem 
ser modificados 
através de 
métodos set 
(métodos 
mutatórios).
23
Modelagem Orientada a Objetos
entidade: o objeto. Ainda não estudamos as classes, mas uma classe 
representa um conjunto de objetos com características semelhantes. 
O comportamento dos objetos é definido na classe através de seus 
métodos e atributos. Um exemplo de classe, que apresenta bem o 
conceito de ‘um conjunto de objetos com características semelhantes’ 
poderia ser a classe “Seres Humanos”. Exemplos de objetos da 
classe “Seres Humanos” seriam João, Maria, José, Eduardo, Patrícia. 
Se pensarmos ainda numa classe que representa os Mamíferos, 
teríamos objetos como baleia, morcego, seres humanos e outros 
como instâncias desta classe. O objeto, que é uma instância de uma 
classe, é capaz de armazenar estados através de seus atributos e 
reagir a mensagens enviadas a ele, assim como se relacionar e enviar 
mensagens a outros objetos.
No mundo real não é difícil a identificação de objetos (em termos de 
sistemas, objetos são todas as entidades que podem ser modeladas). 
Como exemplo, em uma empresa pode-se identificar claramente 
objetos da classe “Empregado” [SOBRAL, 2009]
Um empregado possui uma identidade/estado próprio, seu nome: 
José da Silva, por exemplo. Possui também propriedades/atributos 
como: endereço, idade, dependentes, salário, cargo, entre outras. 
O comportamento/métodos pode ser determinado por operações 
como: aumentar salário, listar dependentes e alterar cargo. 
Você consegue identificar classes e objetos em seu polo de ensino, 
em seu trabalho ou até mesmo em sua casa? Tome nota das classes 
e objetos, adicione atributos e métodos e relacione as instâncias de 
classe. Após este exercício, discuta o que foi produzido no fórum da 
disciplina.
Classes
Uma classe é a descrição de um grupo de objetos com propriedades 
(atributos), comportamentos (métodos), e relacionamentos com outros 
objetos (associações e agregações) [CASTRO, 2009; SOBRAL, 2009]. 
Como já discutido antes, um objeto é uma instância de uma classe.
Uma classe define os atributos e métodos de um tipo de objeto. 
Cada objeto individual é então criado com base no que está definido 
na classe. Por exemplo, Empregado é uma classe que representa 
funcionários de uma empresa; cada colaborador (funcionário), que 
possui nome, CPF, idade, sexo, dependentes, salário, enfim atributos, 
24
Modelagem Orientada a Objetos
é um objeto dessa classe. A estrutura da classe Empregado está 
representada na Figura 4. Como podemos perceber, a classe tem 
três atributos públicos e quatro métodos, também públicos. O método 
atualizarNome, por exemplo, recebe um String, que é um nome, como 
parâmetro e retorna um valor lógico (booleano) para notificar se o 
nome foi atualizado ou não.
Figura 4. Representação da classe Empregado
Um objeto é criado quando a gente dá valores aos atributos de uma 
classe. Uma classe provê toda a informação necessária para construir 
e utilizar objetos de um tipo, cada instância pertence a uma classe e 
uma classe pode possuir múltiplas instâncias (lembra do exemplo da 
classe Seres Humanos e da classe Mamíferos?).
Exemplos de classe:
 Classe: Professor
 Atributos: Nome (String), Matrícula (String), Data de 
Contratação (Date), Titulação (String)
 Métodos: DefineNome(), AlteraNome(), TempoServiço(), 
DefineTitulação(), ...
 Classe: Turma
 Atributos: Cod (Inteiro), Nome (String), Local (String), Créditos 
(String), Horário (Date), Capacidade (Inteiro)
 Métodos: DefineCod(), AlteraCod(), DefineNome(), 
AlteraNome(), NrCreditos(), ...
25
Modelagem Orientada a Objetos
Classes e Objetos em Detalhes
As classes são organizadas em níveis hierárquicos (lembra 
que já vimos um pouco sobre herança?) compartilhando estruturas 
e comportamentos comuns e são associadas a outras classes 
(subclasses e superclasses). Por exemplo, vamos imaginar as classes 
que representam os mamíferos e a classe que representa os seres 
humanos e cachorros, mostrada na Figura 5.
Figura 5. Exemplo de herança entre classes
A classe cachorro poderia ser codificada em Java da seguinte 
maneira:
class Cachorro extends Mamiferos {
// Atributos dos objetos da classe
public String nome;
public String cor;
public String raca;
public int peso;
public String altura;
// Métodos(comportamentos dos objetos da classe)
26
Modelagem Orientada a Objetos
public void andar() {
//executa aqui, em códigos, a ação de andar
 }
public void correr(int velocidade) { 
//executa aqui, em códigos, a ação de correr
 }
public void latir(int altura) { 
//executa aqui, em códigos, a ação de latir
 }
public void comer(int quantidade) { 
//executa aqui, em códigos, a ação de comer
 }
} //encerra a classe
Perceba que essa classe herda da classe Mamiferos, conforme 
descrito na declaração da classe, através da palavra reservada 
extends. Caso a classe Cachorro desejasse acessar o método mamar(), 
da classe mamíferos, ela conseguiria, pois ela herda os métodos e 
atributos públicos da classe pai (Mamíferos). Quando utilizamos 
herança para criar uma nova classe a partir de uma classe existente, 
a nova classe herda os atributos e comportamentos dessa classe 
existente [DEITEL, 2006]. As classes se organizam, e para facilitar a 
reusabilidade de classes, elas são pensadas como uma hierarquia. 
Isto significa que classes mais abaixo (subclasses) na hierarquia 
assumem propriedades das classes superiores (superclasses). Mais 
um exemplo de herança para pensarmos seriam as classes Pessoa 
e Funcionário; Funcionários herdam características de Pessoa, como 
idade, RG, altura, etc...
Vamos agora ver um pouco sobre como escrever as classes
27
Modelagem Orientada a Objetos
Declaração de Classes:
[modificadores] class NomeClasse [extends SuperClasse] [implements Interface]
{
atributos
métodos
}
Modificadores
Classe Pública (public):a classe pode ser utilizada por objetos de 
fora do pacote.
Classe Abstrata (abstract): não pode ter objetos instanciados
Classe Final (final): a classe não pode ter subclasses
As classes definem os valores de atributos e métodos.
Atributos
Os atributos são as características do objeto. Como já vimos, no 
caso de uma Classe que representa um objeto Professor, atributos 
como Nome, Idade, Sexo, Matrícula, Data de Contratação, entre 
outros, definem características do objeto. Em outras palavras, os 
atributos dão valores às características de cada objeto.
Cada atributo tem um nome e um tipo de dado (String, Inteiro, Real, 
Lógico). Os atributos são representados, segundo a notação gráfica 
da classe, no segundo terço da imagem, conforme apresentado na 
Figura 6.
Figura 6. Classe Professor com atributos de Nome e Idade
28
Modelagem Orientada a Objetos
Atributos são definidos ao nível da classe, enquanto que os valores 
dos atributos são definidos ao nível do objeto [CASTRO, 2009].
Métodos
Métodos ou operações são o comportamento ou funções da classe. 
Um método é algo que se pode pedir para um objeto de uma classe 
fazer. Todos os objetos de uma classe compartilham os mesmos 
métodos. Os métodos, assim como já vimos em funções, podem ter 
tipo de retorno ou não, e receber parâmetros ou não. 
Os métodos são definidos dentro da classe, enquanto que sua 
invocação/utilização é definida ao nível de objeto. Por exemplo, uma 
classe Professor define um método alteraNome(String) dentro da 
classe Professor, e quem irá acessar este método será uma instância 
da classe, que é um objeto.
Declaração de Métodos:
[acesso] [chaves] tipoRetorno nomeMetodo( parametros )
{
corpo do método
}
acesso:
» public: o mundo inteiro pode acessar
» protected: somente os métodos da classe e de suas subclasses 
podem acessar, ou ainda, estando num mesmo pacote (depois 
entenderemos pacotes)
» private: somente os métodos da classe podem acessar o 
atributo
chaves:
» static: método da classe e não das instâncias
» abstract: utilizado somente em classes abstratas
» final: o método não pode ser sobrescrito
» synchronized: declara o método como zona de exclusão mutua 
no caso de programas concorrentes.
29
Modelagem Orientada a Objetos
» tipoRetorno: pode ser tipos de dados primitivos (int, double, 
float, boolean, char), objetos (classes como String, Integer, 
Pessoa, Mamiferos, ...) ou não retornar nada (void).
Os métodos são representados, segundo a notação gráfica da 
classe, no último segmento da imagem, conforme apresentado na 
Figura 7.
Figura 7. Classe Professor com atributos e métodos
Criando Classes
Para criar um objeto é necessário criar uma classe e instanciar um 
objeto a partir da classe criada, conforme apresentado na Figura 8. 
Quando uma instância de uma classe é gerada, um objeto é criado e 
o sistema aloca memória para seus atributos [SOBRAL, 2009].
30
Modelagem Orientada a Objetos
Figura 8. Classe Empregado com duas instâncias (EmpregadoUm e EmpregadoDois)
Em Java, teríamos algo como:
Empregado empregado = new Empregado(); (dentro da Classe 
EmpregadoUm e dentro da Classe EmpregadoDois). Este código 
cria um novo objeto do tipo Empregado, com o nome de empregado 
(empregado é uma variável do tipo Empregado). Se este código 
estiver dentro de uma outra classe, estaremos criando uma instância 
de Empregado dentro desta outra. 
Visibilidade de Atributos e Métodos
Na POO utilizamos o encapsulamento de informações provendo 
permissões de acesso aos atributos e métodos das classes. Veremos 
encapsulamento de informações de maneira detalhada em nosso 
primeiro capítulo do segundo volume. Agora, aprenderemos um pouco 
mais sobre o uso destas permissões de acesso (visibilidade).
Modificadores de acesso:
1. Public
A palavra reservada public informa que o atributo ou o método são 
públicos, ou seja, qualquer um pode acessar (desde subclasses como 
outras classes que a estão instanciando).
31
Modelagem Orientada a Objetos
O alvo aqui é o programador cliente que utiliza as classes.
É raro ter atributos públicos, mas é comum ter métodos públicos.
2. Private
A palavra reservada private informa que a propriedade ou método 
só podem ser acessados internamente na classe. Nem seus filhos 
podem acessá-lo.
A intenção aqui é permitir que apenas quem escreve a classe tenha 
acesso aos membros desta.
3. Protected
A palavra reservada protected informa que subclasses podem 
acessar, mas outras classes ou funções não têm essa permissão.
A intenção é dar acesso ao programadores que estenderão a 
classe.
Ainda pensando nos modificadores de acesso, vamos aprender um 
pouco mais sobre os pacotes que utilizamos em Java e sobre suas 
funcionalidades; desta forma, conheceremos o último modificador de 
acesso que temos em Java.
Packages (Pacotes)
O conceito de package (pacote) foi criado para permitir criar 
um espaço grande de nomes em Java. O que ocorria se um 
programador criasse uma classe Empregados e outro programador 
já estivesse criado esta? Será que algum destes seria prejudicado ou 
impossibilitado de criar sua classe?
Este tipo de problema não ocorre caso as classes estejam em 
packages diferentes. Os nomes dos packages formam uma árvore, 
permitindo assim um espaço de nomes muito grande.
Exemplo:
pacote.exemplo.nomeempresa é um nome de package
pacote.exemplo.nomeempresa.Empregados é uma classe deste 
package (note que, por notação, as classes sempre iniciam o nome 
com letra Maiúscula)
Por conta do uso de pacotes, poderíamos ter uma outra classe 
de nome Empregados, em outro pacote, a exemplo de: pacote2.
32
Modelagem Orientada a Objetos
exemplo.Empregados ou pacote3.Empregados... Enfim, podemos 
ter várias classes de mesmo nome, desde que cada uma esteja em 
um pacote distinto. Os nomes dos pacotes são definidos por nós, 
programadores.
A visibilidade e os Pacotes
Se um membro de classe (atributo ou método) não possui 
explicitamente um modificador de acesso, este é tido como visibilidade 
package (friendly ou default). Esta visibilidade é como o public, mas 
somente dentro do package. Todas as classes de um mesmo package 
(e apenas estas) podem acessar um membro friendly/default.
* É importante ter cuidado com a visibilidade default para atributos 
da classe. A depender do tamanho dos pacotes, muitos dados podem 
ficar expostos.
Conheça Mais
Agora que já vimos os conceitos básicos dos objetos, classes e a 
forma como se relacionam, que tal aprofundar seus conhecimentos?
 DEITEL, M. D.; DEITEL, P. J.: C++: Como Programar. 5a. 
Edição. Pearson. 2006.
 CORNEL, G., HORSTMANN C. S.: Core Java 2. Fundamentos. 
7a Edição. Alta Books. 2005.
 ARNOLD, KEN; GOSLING, JAMES: A Linguagem de 
Programação Java. 4a. Edição.Bookman.2007.
Acesse também comunidades virtuais de discussão sobre a 
orientação a objetos e o Java:
 http://www.portaljava.com
 http://www.guj.com.br
 http://www.javafree.com.br
Existem ainda revistas especializadas na linguagem de orientação 
que iremos adotar durante esta disciplina:
» Mundo Java;
33
Modelagem Orientada a Objetos
» Java Magazine.
E você, encontrou algum outro link interessante? Se sim, não deixe 
de postá-lo no fórum da disciplina, e compartilhar os seus achados 
com professores e colegas, está certo?
Aprenda Praticando
Agora, vamos ver os conceitos juntos em uma aplicação? Imagine 
que a gente foi contratado para modelar (segundo o paradigma da 
orientação a objetos, claro!) um sistema de cálculo de notas para a 
UAB/UFRPE. Vamos ver que objetos, classes, métodos e atributos 
estariam envolvidos?
Passo 1. Vamos elaborar uma descrição do problema, ou 
seja, entender bem quais as entidades e seus comportamentos 
envolvidos?
Passo 2. Quais as classes que precisaríamos criar? Vamos incluir 
alguns objetos também?
Passo 3. Quais os comportamentos associados?
Solução
Para esta aplicação, que é simples e muitos já tiveram oportunidade 
de desenvolvê-la em outras disciplinas, o que precisamos? Para 
calcular as notasda UAB, precisamos de quantas notas? Estas 
notas serão atributos de nossa classe. Mas, quantas classes seriam 
necessárias? Com uma classe resolvemos o nosso problema?
Podemos criar uma única classe, de nome CalcularMedia, e 
adicionar atributos do tipo double (que veremos no decorrer do curso, 
por enquanto precisamos saber que double = real), que poderíamos 
chamar de nota1, nota2, nota3, etc... Estes atributos teriam visibilidade 
privada, uma vez que só os utilizaríamos dentro de nossa classe 
CalcularMedia. E que métodos precisaríamos criar? Esta é uma 
decisão que pode variar de desenvolvedor para desenvolvedor. Como 
já estudamos, existem 1000 maneiras diferentes de escrever um 
algoritmo, não é mesmo?
Bom, pensemos em algo bem simples então...
34
Modelagem Orientada a Objetos
Podemos criar um método chamado calcularMedia, que recebe as 
notas por parâmetro e exibe o valor para o usuário. 
Em código, teríamos o seguinte programa:
import javax.swing.JOptionPane;
public class CalcularMedia {
 /**
 * este metodo foi criado, de maneira simples,
 * para calcular uma média entre duas notas
 * @param nota1
 * @param nota2
 */
 public void calcularMedia(double nota1, double nota2) 
{
 //esta chamada imprime um resultado no console
 //(saída do programa)
 System.out.println((nota1+nota2)/2);
 }
 /**
 * este é o metodo principal do programa
 * (semelhante ao main do C, como ja estudamos)
 * @param args
 */
 public static void main(String[] args) {
 //atributos do METODO main. Não são GLOBAIS.
 //Não são da Classe.
 //São acessíveis apenas dentro deste método
 int nota1;
 int nota2;
 
35
Modelagem Orientada a Objetos
 //instancia da classe CalcularMedia
 CalcularMedia calc = new CalcularMedia();
 
 //JOptionPane.showInputDialog é um método, da
 //biblioteca Java, que apresenta uma janela para
 //o usuário com uma mensagem, solicitando entrada
 //de dados. O valor digitado pelo usuário é sempre
 //um String. Por este motivo, temos que
 // transformar este valor que no caso solicitamos
 //(uma nota), para um valor int, e utilizamos
 //então um outro método da API Java
 //(Integer.parseInt()).
 nota1 = Integer.parseInt(JOptionPane.showInputDialog 
(null, “Digite a nota 1”));
 nota2 = Integer.parseInt(JOptionPane.showInputDialog 
(null, “Digite a nota 2”));
 //chamada ao método que recebe as notas
 // e calcula uma média
 calc.calcularMedia(nota1,nota2);
 }
}
Atividades Práticas
1. Vamos exercitar? Para começar, vamos imaginar que fomos 
contratados para modelar duas aplicações. Um controle 
de estoque para o supermercado da nossa cidade, e uma 
aplicação para a locadora de filmes. Agora, para cada uma 
das aplicações, enumere as classes necessárias. Lembre de 
considerar os atributos e métodos da classe. Uma vez criado 
o esqueleto de cada classe, agora é hora de pensar nos 
parâmetros e tipos de retornos dos métodos que irá prover 
36
Modelagem Orientada a Objetos
em suas classes. Para desenhar as classes (representar 
graficamente, fazer a modelagem), você pode utilizar o JUDE5 
ou o ArgoUML6. Após o desenvolvimento da atividade, discuta 
no fórum suas soluções.
2. Crie um arquivo texto e responda as perguntas abaixo. 
Depois, envie o artigo no link Atividade Virtual 1, disponível no 
ambiente.
a. O que é uma classe? Demonstre com um trecho de código em 
Java
b. O que é uma instância? Ilustre com um trecho de código.
c. Cite 3 vantagens da programação orientada a objetos.
d. Cite e explique três características que deveriam estar presentes 
em uma linguagem de programação OO.
e. Escolha uma linguagem de programação e descreva as 
características do POO encontradas nesta linguagem.
f. Escolha um domínio de problema, descreva este domínio 
através de um modelo descritivo sucinto e represente o contexto 
descrito através dos conceitos do POO.
Atividades de Interação
Vamos trocar ideias em um fórum de discussão que será 
coordenador pelo tutor virtual. Converse com seus colegas, entreviste 
pessoas sobre o assunto, leia mais sobre o tema abordado neste 
capítulo. Realize uma entrevista com alunos e outros colegas 
professores, a fim de coletar informações sobre as vantagens e 
dificuldades encontradas pelos desenvolvedores OO. O que é preciso 
ter em mente quando se participa deste tipo de desenvolvimento? 
Que dicas poderíamos dar para facilitar o processo? Que dificuldades 
você enfrentou até agora?
Saiba Mais
5 Jude - o nome 
do programa é 
um acrônimo 
de Java and 
UML Developers 
Environment 
(Ambiente para 
Desenvolvedores 
UML e Java). 
Download em: 
http://jude.
change-vision.
com/jude-web/
download/index.
html
Saiba Mais
6 ArgoUML – 
uma aplicação 
open source 
que usa UML 
para modelar 
o softwares de 
computador. 
Download em 
http://argouml.
tigris.org/
37
Modelagem Orientada a Objetos
Vamos Revisar?
Resumo
Você estudou, neste capítulo, os conceitos básicos da Orientação a Objetos. Em 
particular, vimos os conceitos de classes e objetos, que unem a parte de dados 
e comportamento das entidades de mundo real, o que permite que construamos 
modelos mais fiéis, e também mais fáceis de manter do mundo real. Também 
vimos como representar os comportamentos, através dos métodos e que níveis 
de visibilidade podem ser utilizados. Vimos também que, antes de começarmos 
a codificar, é preciso entender bem os problemas e criar soluções abstratas, que 
depois serão concretizadas na implementação. No próximo capítulo estudaremos 
a linguagem UML, que vai nos permitir representar bem todas as características 
de um sistema de software, antes de codificá-lo.
38
Modelagem Orientada a Objetos
Capítulo 3
O que vamos estudar neste capítulo?
Objetivos
Neste capítulo, vamos estudar os seguintes temas:
» O que é a Linguagem UML?
» Diagramas da Linguagem UML
Metas
Após o estudo deste capítulo, esperamos que você consiga:
» Identificar os conceitos básicos da UML
» Identificar como representar sistemas através dos diagramas 
providos pela UML
39
Modelagem Orientada a Objetos
Capítulo 3 - O Paradigma OO e a 
Linguagem UML
Vamos conversar sobre o assunto?
Com o avanço na utilização das linguagens orientadas a objeto na 
década de 90, junto à disseminação e utilização destas (linguagem 
Java, por exemplo), começou a surgir também um grande número de 
metodologias e diferentes notações para desenvolver e representar 
softwares. Este fenômeno foi causado pela evolução da tecnologia, 
que permitiu com que se construíssem aplicações cada vez mais 
complexas, que integram um volume imenso de informações. Com 
isto, era preciso, antes de implementar os sistemas propriamente 
ditos, criar modelos de soluções, que poderiam ser refinados 
juntamente com os usuários e clientes das aplicações, para garantir 
um desenvolvimento bem sucedido.
Através da OMG7 (Object Management Group), uma proposta 
foi iniciada para apresentação de trabalhos de padronização de um 
modelo para desenvolvimento de sistemas que contribuísse com o 
paradigma da orientação a objetos. A Rational Software Corporation 
propôs e obteve Êxito com a linguagem UML (Unified Modeling 
Language).
Esta proposta de padronização foi um esforço liderado por Grady 
Booch, James Rumbaugh e Ivar Jacobson que resultou na versão 1.0 
da UML publicada em janeiro de 1997. A linguagem UML foi adotada 
como padrão pela OMG no mesmo ano [FURLAN, 1998].
O que é a linguagem UML
A Linguagem de Modelagem Unificada (UML) não é um método de 
desenvolvimento de sistemas. É uma linguagem de modelagem gráfica 
para descrever um projeto de software. Ela cria visões do sistema que 
está sendo desenvolvido, simplificando, desta forma, o processo de 
construção do sistema [TONSIG, 2000; RATIONAL, 2000].
A UML possui um conjunto de 6 artefatos gráficos - Diagrama de 
Caso de Uso, Diagrama de Classe, Diagrama de Sequencia, Diagrama 
Saiba Mais
7 OMG – http://
www.omg.org
40
Modelagem Orientada a Objetos
de Colaboração, Diagrama de Estados(Transição de Estados) e 
Diagrama de Componentes.
Vamos conhecer um pouco mais sobre cada uma destas 
representações gráficas do UML.
Diagrama de Caso de Uso
Descreve a proposta de funcionamento de novos sistemas que 
serão desenvolvidos. Um Caso de Uso representa uma interação 
entre um usuário (humano ou máquina) e o sistema. Normalmente, 
para cada funcionalidade (ou comportamento) que queremos que um 
sistema apresente, é criado um caso de uso. Por exemplo: “acessar 
extrato” e “realizar saque “ são todos Casos de Uso de um sistema 
bancário. Abaixo vamos ver, em maiores detalhes, os componentes 
de um caso de uso. 
» Atores
Na UML, um ator é representado por um boneco e o nome do 
ator. Um ator é um usuário do sistema (usuário humano ou sistema 
computacional, uma vez que podemos ter sistemas que se comunicam 
com outros, como acontece, por exemplo, quando você faz um saque 
no banco 24h), conforme apresentado na Figura 9.
Figura 9. Representação de um ator no diagrama de casos de uso
» Caso de Uso
Um caso de uso é representado por uma elipse e um rótulo com o 
nome do caso de uso, conforme apresentado na Figura 10. Um caso de 
uso define uma função do sistema. Uma função pode ser estruturada 
em outras funções (um caso de uso pode ser estruturado).
41
Modelagem Orientada a Objetos
Figura 10. Representação de um caso de uso no diagrama de casos de uso
Para o nosso exemplo de sistemas de conta bancária (com 
pouquíssimas funcionalidades), poderíamos representa-lo através do 
diagrama de caso uso conforme Figura 11.
Figura 11. Exemplo de diagrama de caso de uso (sistema bancário simples)
» Relacionamentos
 Associação (entre atores e casos de uso)
A associação define uma funcionalidade do sistema sob o ponto 
de vista do usuário, conforme apresentado na Figura 11.
 Generalização (entre atores)
O ator pode herdar as funcionalidades (casos de uso) de outro 
ator, conforme apresentado na Figura 12. O ator cliente herda o caso 
de uso ‘realizar login’ do ator usuário (mesmo conceito de herança 
que já estudamos neste fascículo, relacionado à POO).
42
Modelagem Orientada a Objetos
Figura 12. Exemplo de diagrama de caso de uso (sistema bancário simples) com relação 
entre atores
Por fim, ainda se tratando de diagrama de casos de uso, existem 
os relacionamentos entre casos de uso.
○ Entre casos de uso 
▪ Include
Um relacionamento include de um caso de uso A para um 
caso de uso B indica que B é essencial para o comportamento 
de A. Pode ser dito também que B é_parte_de A.
▪ Extend
Um relacionamento extend de um caso de uso B para 
um caso de uso A indica que o caso de uso B pode ser 
acrescentado para descrever o comportamento de A (não 
é essencial). Como o nome nos diz, é uma extensão. A 
extensão é inserida em um ponto de extensão do caso de 
uso A.
Ponto de extensão em um caso de uso é uma indicação 
de que outros casos de uso poderão ser adicionados a ele, 
ou seja, um determinado caso de uso poderá ser acrescido 
por outros, que serão conectados a ele. Quando o caso de 
uso for invocado, ele verificará se suas extensões devem ou 
43
Modelagem Orientada a Objetos
não ser invocadas.
Uma vez completados os diagramas de caso de uso, agora 
podemos começar a pensar no sistema computacional propriamente 
dito. O primeiro passo nesta direção é construir o diagrama de classes, 
detalhado abaixo.
Diagrama de Classes
Um diagrama de classes é uma representação da estrutura e 
relações das classes que servem de modelo para objetos, conforme 
ja vimos na Figura 3. As classes podem apresentar três tipos de 
relacionamento: associação, composição e herança (especialização 
ou generalização), que serão vistos em maiores detalhes no decorrer 
da disciplina. Através destes relacionamentos, identificamos a relação 
entre as classes, temos a visão de quem são as classes pai e classes 
filhas e que características são herdadas (atributos e métodos). 
Diagrama de Sequência
Este diagrama representa a sequência de processos (troca 
de mensagens entre objetos) num sistema, conforme Figura 13. 
Como um projeto pode ter uma grande quantidade de métodos em 
classes diferentes, pode ser difícil determinar a sequência global 
do comportamento (Lembra dos algoritmos não sequenciais que 
estudamos? E dos subalgoritmos? Este diagrama representa o fluxo 
percorrido pelos objetos do sistema). 
Este diagrama possui:
» Atores: Semelhantes aos do diagrama de casos de uso 
(usuários do sistema).
» Objetos: Representam as instâncias das classes representadas 
no processo. Os objetos são ilustrados como retângulos. 
Linhas horizontais ou diagonais representam mensagens 
trocadas entre objetos. Estas linhas contém o nome da 
mensagem e, opcionalmente, os parâmetros da mesma. 
Observe que também podem existir mensagens enviadas 
para o mesmo objeto, representando uma interação;
» Gate: Ponto de transmissão da mensagem para dentro ou para 
fora do fragmento de interação.
44
Modelagem Orientada a Objetos
» Fragmento: Fragmentos de interação como: Alt (Alternativa), 
Opt (Opcional), Break (Parar), Loop (Repetição) e outras.
» Linha de vida: As linhas de vida compõem a dimensão vertical 
(tempo). A dimensão vertical é a vida do objeto.
Figura 13. Exemplo do ITA de um sistema de controle aéreo simples
Diagrama de Colaboração
O Diagrama de Colaboração apresenta uma interação realizada no 
sistema, apresentando um conjunto de objetos e seus relacionamentos, 
incluindo as mensagens que podem ser trocadas entre eles. Este 
diagrama é semelhante ao diagrama de sequências.
Diagrama de Estados (Transição de Estados)
No diagrama de estado, um objeto possui um comportamento e 
um estado. O estado de um objeto depende da atividade que está 
sendo executada por ele. Um diagrama de estado mostra os possíveis 
estados de um objeto e as suas possíveis mudanças de estado.
Diagrama de Componentes
Este diagrama apresenta como as classes deverão se encontrar 
organizadas através da noção de componentes8.
Converse sempre com seus colegas e com o seu tutor, através do 
Saiba Mais
8 Componentes 
de Software é o 
termo utilizado 
para descrever 
o elemento 
de software 
que encapsula 
uma série de 
funcionalidades. 
Um componente 
é uma unidade 
independente, 
que pode 
ser utilizado 
com outros 
componentes 
para formar 
um sistema 
mais complexo 
[Wikipedia].
45
Modelagem Orientada a Objetos
fórum de discussão, para esclarecer as suas dúvidas. Você entendeu 
realmente quando devemos utilizar os diagramas UML? Quando vamos 
iniciar um novo sistema, qual o diagrama que devemos utilizar como 
ponto de partida (que nos dá a visão do que iremos desenvolver)? 
E após este diagrama, qual o diagrama que nos auxiliaria melhor 
no desenvolvimento de nosso código? Vamos discutir isto no fórum! 
Sugira exemplos.
Atenção
Apresentamos exemplos dos diagramas mais comumente utilizados em 
sistemas “de prateleira”. Contudo, exemplos de todos os tipos de diagramas 
podem ser encontrados no site: http://www.dsc.ufcg.edu.br/~jacques/cursos/
map/html/uml/diagramas/diagramas.htm.
Conheça Mais
Agora que já vimos os conceitos básicos UML, que tal aprofundar 
seus conhecimentos?
Alguns links interessantes:
1. Link para Apostila Interessante de UML – Blog do Prof. Wilson
2. http://docs.kde.org/stable/pt_BR/kdesdk/umbrello/uml-basics.html - 
tutorial Básico sobre UML
3. http://www.micropic.com.br/noronha/Informatica/PD/AL/projeto%20
orientado%20a%20objeto%20uml.pdf – apostila com conceitos 
básicos do UML
4. http://imasters.uol.com.br/artigo/2934/uml/modelagem_orientada_a_
objetos_e_uml/
5. http://www.youtube.com/watch?v=XwaCMxAVkcs - ppt de 
introdução à UML da Profa. Nívia Domingues
E você, encontrou algum outro link interessante? Se sim, não deixe 
de postá-lo no fórum da disciplina, e compartilhar os seus achados 
com professores e colegas, está certo?
46
Modelagem Orientada a Objetos
Aprenda Praticando
Faça o diagrama de classes UML e programe, em Java, a classe 
Produtos. Cada produto tem código(inteiro), nome do produto, preço e 
quantidade em estoque. As funcionalidades que devem ser oferecidas 
pela classe são:
» adicionar produto ao estoque (método que será chamado 
quando a loja comprar material)
» vender produto (diminuindo o estoque)
» alterar o nome do produto
» alterar o preço do produto
» métodos de acesso (get) para obter nome, código, preço e 
quantidade em estoque de produtos.
Pense em algo como a figura ilustrada acima... Tente redesenhar 
este diagrama no JUDE e traduzi-lo para código Java.
Atividades Práticas
Vamos tentar representar nosso programa para cálculo de notas 
da UAB/UFRPE em UML (Diagrama de Classes e Diagrama de Caso 
de Uso)? Poste no fórum seu código Java e sua representação UML.
47
Modelagem Orientada a Objetos
Atividades de Interação
Vamos trocar ideias em um fórum de discussão que será coordenado 
pelo tutor virtual. Converse com seus colegas, entreviste pessoas 
sobre o assunto, leia mais sobre o tema abordado neste capítulo. 
Realize uma entrevista com alunos e outros colegas professores, a fim 
de coletar informações sobre as vantagens e dificuldades encontradas 
pelos desenvolvedores OO. O que é preciso ter em mente quando se 
participa deste tipo de desenvolvimento? Que dicas poderíamos dar 
para facilitar o processo? Que dificuldades você enfrentou até agora?
Vamos Revisar?
Resumo
Você estudou, neste capítulo, os conceitos básicos da UML. Vimos de maneira 
objetiva e direta como representar sistemas através dos diagramas providos 
pela UML. É importante notar que a modelagem gráfica do sistema contribui 
para uma implementação mais rápida e correta do sistema. Antes de codificar, 
representamos o sistema graficamente e, desta forma, podemos então identificar 
falhas e pontos de melhoria, além de avaliar os requisitos com o cliente. 
Perceba que a visão aqui provida foi bastante objetiva. Utilize os links sugeridos e 
busque novas fontes de aprendizado sobre a UML. Esta linguagem é amplamente 
utilizada em mercado. É importantíssimo seu aprendizado! Bons Estudos!
48
Modelagem Orientada a Objetos
Capítulo 4
O que vamos estudar neste capítulo?
Objetivos
Neste capítulo, vamos estudar os seguintes temas:
» Um pouco sobre a história da programação
» A linguagem Java
Metas
Após o estudo deste capítulo, esperamos que você consiga:
» Identificar características da POO na linguagem Java
» Aprender as características da linguagem Java
» Configurar o seu ambiente de desenvolvimento
» Desenvolver seu primeiro programa Java
49
Modelagem Orientada a Objetos
Capítulo 4 - Programando de 
acordo com o Paradigma POO
Vamos conversar sobre o assunto?
Para esta disciplina, iremos aplicar os conceitos estudados 
através do uso da linguagem de programação Java, juntamente com 
o ambiente de desenvolvimento integrado (IDE) Eclipse. C++9, C#10, 
Java, Object Pascal, Objective-C e Python11 são outros exemplos de 
linguagens de programação orientadas a objetos. A linguagem Java 
foi escolhida para esta disciplina por esta ser, atualmente, a linguagem 
de programação mais utilizada no mundo. Antes de estudarmos Java 
em algum detalhe, vamos dar uma olhadinha nas linguagens OO, sua 
história e motivação para o seu estudo e desenvolvimento. 
Um pouco de História
É praticamente incontável o número de linguagens de 
programação12. Uma mesma linguagem, inclusive, pode aparecer 
em várias versões, como Fortran, Lisp e BASIC, como Fortran 66 e 
Fortran 99.
Ao longo dos anos, certamente milhares de linguagens foram 
propostas, descritas, implementadas e usadas por diferentes 
pessoas. Entre essas linguagens, algumas obtiveram sucesso pleno 
e são reconhecidas, como C, C++, Java e Pascal13. Finalmente, 
algumas linguagens nunca conseguiram reconhecimento, ou foram 
apenas propostas teóricas ou usadas em poucas localidades, sendo 
provavelmente desconhecidas da maior parte dos interessados 
na área, como Smalltalk 72 (um predecessor de Smalltalk 80). De 
uma forma geral, ao decorrer do tempo observou-se os seguintes 
aspectos: 
» crescimento da capacidade dos computadores e complexidade 
dos programas
» linguagens foram ficando cada vez mais independentes do 
hardware
Saiba Mais
9 C++ - http://
www.cplusplus.
com/
Saiba Mais
10 C# - http://
msdn.microsoft.
com/en-us/
library/618ayhy6.
aspx
Saiba Mais
11 Python - http://
docs.python.org/
reference/
Saiba Mais
12 Tim O’Reilly, 
conhecido 
como o criador 
da expressão 
Web 2.0 criou 
um pôster com 
o histórico das 
linguagens em 
programação, 
você pode 
acessá-lo 
através do link 
a seguir: http://
blog.uncovering.
org/archives/
uploads/2007/ 
2007090800_
linguagens_
programacaoprog 
_lang_poster.pdf
50
Modelagem Orientada a Objetos
» necessidade de linguagens mais fáceis de usar e oferecendo um 
maior nível de abstração, o que implica em perda de eficiência 
(por exemplo, símbolos de assembly, variáveis e atribuição, 
estruturas de controle, módulos, parametrização de módulos)
» aumento do custo de programação e diminuição do custo dos 
computadores
» surgimento de novos conceitos e tecnologias
De fato, a evolução das linguagens está intimamente ligada aos 
momentos tecnológicos (tipos de ambiente, informações e máquinas 
disponíveis). Vamos dar uma olhadinha na história e evolução das 
linguagens de programação15?
Assembly
O Assembly foi provavelmente a primeira linguagem de 
programação da história, surgida na década de 50, época em que 
os computadores ainda usavam válvulas (lembram do que vimos 
nas disciplinas de Laboratório/Elementos de Informática?). A ideia 
do assembly é usar um comando em substituição a cada instrução 
de máquina. Ela usa uma sintaxe complicada e “exageradamente” 
difícil, isto porque, antes da década de 50 os programadores de 
máquinas tinham que escrever instruções em código binário, isto é, 
cada instrução tinha um formato como 0110010110011011010110011
010111010110101 ... Na verdade, o Assembly foi criado para facilitar 
o uso dessa tarefa, mas é considerado uma linguagem de baixo nível, 
pois tudo o que o processador interpreta tem que ser descrito pelo 
programador. Assim o código acima seria “add EAX” em Assembly. 
Bastava apenas, depois de estar concluída a escrita do código, rodar 
o compilador e tínhamos o programa. Certamente uma alternativa 
menos complexa que escrever 0s e 1s, mas, ainda assim difícil de 
assimilar, não acham? Depois que o código está pronto, o compilador 
transforma o código escrito em assembly em linguagem de máquina, 
que finalmente poderá ser entendida pelo processador. 
Existem também os decompiladores, que fazem o trabalho 
inverso, de transformar um programa já compilado, em um código em 
linguagem assembly. Este recurso é chamado de engenharia reversa. 
É assim que conseguem “crackear” programas, quebrar códigos de 
proteção (como o do DVD), etc. Claro que para isso, é preciso alguém 
que conheça muito de assembly e que tenha disposição para ficar 
Saiba Mais
13 Pascal - http://
www.freepascal.
org/docs-html/ref/
ref.html
Saiba Mais
14 Wikibooks 
- http://
pt.wikibooks.
org/wiki/
Introdu%C3% 
A7%C3%A3o_ 
%C3%A0_
programa 
%C3%A7% 
C3%A3o/
Linguagens_de_
programa 
%C3% 
A7%C3%A3o
Saiba Mais
15 Guia do 
Hardware - 
http://www.
guiadohardware.
net/artigos/
linguagens/
51
Modelagem Orientada a Objetos
estudando o código até encontrar o que procura.
Por causa desta característica de permitir trabalhar diretamente 
com as instruções do processador, o assembly é chamado de 
linguagem de baixo nível. Existem também linguagens de alto nível, 
como C++ ou Pascal, onde é possível usar várias funções já prontas 
ou mesmo ferramentas visuais para ajudar no desenvolvimento das 
aplicações.
Fortran
O Fortran1 foi uma das primeiras linguagens de alto nível da 
história. Enquanto o Assembly é chamado de linguagem de baixo 
nível, por nele utilizarmos diretamente as instruções e endereços do 
processador e memória, numa linguagem de alto nível temos várias 
funções prontas, o que facilita muito a programação,tornando o 
aprendizado mais fácil e também fazendo o código ficar independente 
do computador onde será executado. Por outro lado, programar em 
alto nível torna em muitos casos o programa maior e mais pesado, já 
que o compilador jamais conseguirá gerar um código tão otimizado 
quanto um programador experiente conseguiria.
Fortran é a contração de “Formula Translator”. A primeira versão 
do Fortran foi criada no final da década de 50, mas a linguagem 
começou a ser usada em larga escala a partir da metade da década 
de 60, quando surgiram várias versões diferentes.
Pascal
O Pascal é outra linguagem de alto nível, criada durante a década 
de 60. O Pascal é uma linguagem bastante estruturada, com regras 
bastante rígidas, o que a torna difícil de usar. Por outro lado, é uma 
linguagem boa para fins didáticos (até o início dos anos 2000, vários 
cursos de engenharia ainda utilizavam o Pascal em seus cursos 
introdutórios).
Cobol
O Cobol2 (COmmon Business Oriented Language) foi uma 
linguagem usada para a criação e estruturação de bancos de dados 
financeiros nos anos 60 que ainda hoje é usada por este tipo de 
Saiba Mais
16FORTRAN 
- http://www.
fortran.com/
Saiba Mais
17COBOL - http://
www.infogoal.
com/cbd/
52
Modelagem Orientada a Objetos
serviços. Comparada com o Pascal e o Assembly, esta linguagem é 
bem amigável e bastante acessível e atualmente serve para várias 
tarefas em sistemas comerciais, financeiros e administrativos, para 
empresas e governos. Até hoje esta linguagem é usada em muitos 
sistemas bancários, o que explica a grande procura por programadores 
experientes nesta linguagem na época do bug do ano 2000.
Linguagem C
Poder-se-ia dizer que o C é uma das maravilhas das linguagens de 
programação. Muitos dos programas existentes hoje foram escritos 
nesta linguagem. O C foi desenvolvido nos laboratórios Bell na década 
de 70, e possui as seguintes características:
» Portabilidade entre máquinas e sistemas operacionais
» Dados compostos em forma estruturada
» Total interação tanto com o SO como com a máquina
» Código compacto e rápido.
Nos anos 80, C era a linguagem mais utilizada por programadores, 
por permitir a escrita intensiva de todas as características das 
linguagens anteriores. O Próprio UNIX e Linux foram escritos em C, 
assim como o front-end do MS-DOS, Windows e as aplicações Office 
mais usadas no mundo (OpenOffice.org, Microsoft Office, embora 
cada uma delas incluísse suas próprias linguagens de script), sendo 
também utilizada em aplicações gráficas e criação de efeitos especiais 
nos filmes Strar Trek e Star Wars.
A maior parte dos programas Linux e o Kernel quase todo foram 
escritos em C, o que explica o porquê do sistema ser tão rápido em 
algumas tarefas.
C++
O C++ é uma evolução do C. Em outras palavras, C++ é uma 
linguagem que adiciona ao C um conjunto de recursos a mais, como 
o próprio nome sugere. O C++ é o C orientado a objetos. Avançando 
nos 90, passou por diversas atualizações e padronizações nesta 
época, o padrão do C++ foi exaustivamente trabalhado pelos 
desenvolvedores durante oito anos, quando finalmente foi aprovado 
pelo ANSI (American National Standard Institute). 
53
Modelagem Orientada a Objetos
Igualdades e Diferenças nas Linguagens
As igualdades entre as várias linguagens são grandes, a exemplo 
de instruções e sintaxes. Porém é necessário notar-se que a 
sintaxe básica dessas linguagens modifica-se e é necessária a sua 
aprendizagem (por isto é importante o aprendizado de algoritmos, 
porque se aprende a pensar em soluções de maneira lógica e 
independente de linguagens). Para isso o melhor local para aprender 
e se aperfeiçoar são os livros sobre a matéria.
O problema mais importante, hoje, na área de Linguagens de 
Programação, é o desenvolvimento de linguagens que aumentem a 
produtividade do programador. Linguagens que permitam escrever 
programas corretamente, esta é a razão do rápido crescimento 
de linguagens como Java. Além do crescimento da linguagem, 
observamos também o crescimento de IDEs e também de novos 
plug-ins e componentes que são agregados aos ambientes de 
desenvolvimento (oferecendo recursos gráficos mais avançados para 
o desenvolvimento de telas, por exemplo).
Atualmente, uma das linguagens orientadas a objetos mais 
utilizadas é a linguagem Java [DEITEL, 2006] famosa por sua 
independência de plataformas (o programa que você escreve pode 
executar em qualquer máquina e sistema operacional, sem precisar 
de modificações).
Por isso, vamos, ao longo desta disciplina, estudá-la mais a 
fundo. Para começar, que tal dar uma olhadinha na história desta 
linguagem?
54
Modelagem Orientada a Objetos
A Linguagem Java
Java é uma linguagem muito disseminada e discutida entre os 
desenvolvedores de todo o mundo e isto se deve a vários fatores. Java 
foi desenvolvida na década de 90 por uma equipe de programadores 
chefiada por James Gosling, na empresa Sun Microsystems 
[CAELUM]. 
Antes de prosseguir, vamos descobrir o porquê do sucesso de 
Java? Para isto, precisamos pensar um pouco em alguns problemas 
frequentemente encontrados por desenvolvedores de sistemas:
» manipulação de ponteiros?
○ Os apontamentos para endereços de memória não são 
de fácil interpretação e entendimento. A complexidade em 
prover manutenção ao software também é um problema.
» gerenciamento de memória?
○ Durante muito tempo, o gerenciamento de memória foi uma 
grande dificuldade. Os programadores eram responsáveis 
pela alocação e liberação da memória, tudo feito de forma 
manual. Hoje, em todas as plataformas modernas, Java 
inclusive, temos gerenciamento de memória automático 
através de algoritmos de coleta de lixo. 
» organização?
○ Como organizar o software de forma a facilitar seu reuso, 
manutenção e entendimento?
» falta de bibliotecas?
○ Como lidar com a falta de bibliotecas/códigos? Muitas vezes, 
códigos simples e de grande utilidade não se encontram 
disponíveis.
» ter de reescrever parte do código ao mudar de sistema 
operacional?
○ Portabilidade 
» custo de usar a tecnologia?
○ A linguagem tem suporte? Tem ambiente para 
desenvolvimento gratuito?
55
Modelagem Orientada a Objetos
Java tenta amenizar esses problemas. Java é uma linguagem 
de programação multiplataforma, ou seja, seus programas podem 
ser executados em qualquer sistema operacional, desde que o 
interpretador esteja instalado. Diferentemente das linguagens 
convencionais, que são compiladas para código nativo, a linguagem 
Java é compilada para um “bytecode” que é executado (interpretado) 
por uma máquina virtual [CAELUM].
A Java Virtual Machine (JVM) ou Máquina Virtual Java é um 
programa que converte o código Java em comandos que o sistema 
operacional possa executar. Existem máquinas virtuais para vários 
sistemas operacionais, o problema é que devido ao processamento 
executado pela máquina virtual, o programa torna-se mais pesado do 
que seria caso escrito diretamente para a plataforma (os programas 
compilados, como já vimos antes). Um compilador traduz todo o 
código da linguagem de programação para um determinado sistema 
operacional, enquanto que uma linguagem interpretada se utiliza de 
uma máquina virtual para interpretar o código do programa, linha a 
linha. No lugar de traduzir o código da linguagem de programação 
para o sistema operacional, o código do programa é compilado para 
bytecodes e só então este é interpretado, linha a linha, pela máquina 
virtual, para o sistema operacional que está executando o programa.
Explicando de forma mais elaborada, linguagens de programação 
“tradicionais”, como o C e o C++ utilizam um compilador diferente para 
cada plataforma ou sistema operacional em que o programa irá rodar. 
GCC (GNU Compiler Collection), Dev-C++, C++ Builder e Turbo C 
são exemplos de compiladores. O código fonte em si pode ser escrito 
de forma a ser facilmente portável, ou seja, rodar em diferentes 
versões do Unix ou em várias famílias de processadores diferentes 
sem muitas alterações,

Outros materiais