Introdução à Orientação a Objetos
Prof. Ricardo Linden
Programação Orientada a Objeto - Aula 1
1
História das LPOO
• Simula 67: Encapsulamento em uma definição de “class”
• Smalltalk-80: Xerox PARC: Primeira linguagem verdadeiramente
orientada a objeto (Alan Kay)
• C++: Primeira linguagem OO amplamente aceita (inicialmente era
apenas um pré-processador)
• C++, Ada95, Modula-3, CLOS: acrescentaram orientação a objeto a
estruturas pré-existentes
• Java: Modelo de objetos derivado do C++, simplificado e
melhorado
Programação Orientada a Objeto - Aula 1
2
Programação OO X Procedural
• A orientação a objeto muda o foco da programação dos algoritmos
para as estruturas de dados:
– A organização lógica dos dados determina a organização do
software
– O processo de design do software se concentra na organização
dos dados e na definição das operação que a eles são aplicadas
– “Tipo de dados” agora está embutido no conceito de “classe”
Mais perto da forma como
pensamos no “mundo real”
Programação Orientada a Objeto - Aula 1
3
Conceitos Básicos da Orientação a Objetos
Para podermos começar a nossa aula, nós primeiro precisamos
entender os seguintes conceitos básicos:
–Sub-classe
– Objeto
–Herança
– Classe
–Abstração
– Instância
–Encapsulamento
– Método
–Polimorfismo
– Mensagem
Programação Orientada a Objeto - Aula 1
4
Objeto
• Um pacote de software que contém uma coleção de procedimentos
e dados relacionados.
• Um objeto representa um item, unidade ou entidade (real ou
abstrata) individualmente separável com um papel bem definido
no domínio do problema.
• Um objeto, como um substantivo, pode ser uma pessoa, local ou
objeto  basicamente, qualquer conceito que seja aplicável ao
projeto do sistema.
Programação Orientada a Objeto - Aula 1
5
Classe
• Um padrão que define os métodos e características que
serão incluídos em um tipo particular de objeto.
• Uma classe é uma definição geral dos atributos e métodos
de um conjunto de objetos.
• Exemplos: Cliente, Veículo, Conta Corrente, Documento,
Reserva
• Cada uma destas classes representa uma série de
características comuns:
– dados, como placa do veículo
– ações, como ligar o veículo
Programação Orientada a Objeto - Aula 1
6
Instância
• Outro nome para um objeto que pertença a uma classe particular.
• Quando uma aplicação está executando, objetos são instanciados
de uma classe e tornam-se então instâncias desta classe.
• Exemplos
- Ticket No. 00-123961 representa um objeto (instância) da classe
“Reserva”.
- “Meu Fusquinha” representa uma instância da classe “Veículo”
Programação Orientada a Objeto - Aula 1
7
Método
• Um procedimento/função dentro de um objeto.
• Métodos são ações que uma classe ou objeto faz e incluem a
lógica da aplicação.
• Um método é similar a uma função/procedimento ou subrotina
em termos de programação estruturada.
• Exemplos:
- “Criar uma nova conta” é um método da classe “Conta”
- “Registrar para uma Matéria” é um método para a classe
“Estudante”
Programação Orientada a Objeto - Aula 1
8
Atributos vs. Métodos
• Atributos definem os dados enquanto os métodos definem a
funcionalidade.
• Atributos são definidos por seus nomes e tipos (por exemplo,
integer, string, date).
• Métodos são definidos escrevendo o código para isto (exceto
no caso de métodos virtuais)
• Atributos e métodos são ambos encapsulados dentro dos seus
objetos correspondentes
Programação Orientada a Objeto - Aula 1
9
Encapsulamento
• Uma técnica nos quais os dados estão encapsulados junto com seus
procedimentos correspondentes
• Encapsulamento esconde tanto os métodos quanto os atributos do
mundo exterior.
• Visibilidade: Public, Private, Protected, e Package-level.
– Private: Somente membros da classe podem acessar a propriedade/método
– Protected: Somente membros da classe e subclasses (classes descendentes)
podem acessar a propriedade/método
– Public: Todas as classes podem acessar a propriedade/método
– Package Level : Todos as classes do mesmo package conseguem acessar a
propriedade/método
Vamos discutir mais detalhadamente mais à frente
Programação Orientada a Objeto - Aula 1
10
Mensagem
• Um sinal que um objeto manda para outro que pede que o objeto que
recebe o sinal execute um de seus métodos.
• Como resultado do encapsulamento, mandar mensagens se torna o
mecanismo de comunicação entre objetos que interagem.
• Um formato geral de mensagem tem o seguinte formato:
Object.método(parâmetros)
• Exemplo: invoice.calcularTotal ( )
Programação Orientada a Objeto - Aula 1
11
Sub-Classe
• Uma classe que é um caso especial de outra classe.
• Sub-classe também é conhecida como classe filha, enquanto que a
super-classe é também chamada de classe pai ou mãe.
• Sub-classes são especializações das super-classes e são criadas via
herança
• Exemplo:
– Um pediata é um caso especial de médico
– Um carro é um caso especial de veículo.
Programação Orientada a Objeto - Aula 1
12
Herança
• Em OO existe um relacionamento “Is-a” entre classes
– Exemplo : aluno-4o.-período is-a aluno is-a pessoa
• Classes derivadas são chamadas de subclasses (mesmo que normalmente sejam
maiores)
• Pode haver herança simples e múltiplia
• Classes base abstratas:
– Classes não têm instâncias reais (objetos)
– Subclasses têm que implementar alguns métodos
– Ex. : classe veículo_automotor com o método abstrato ligar. Não existem objetos
desta classe, que é uma classe base abstrata. As classes carro e moto herdam as
propriedades desta classe e implementam o método ligar.
Programação Orientada a Objeto - Aula 1
13
Hierarquia de Classes
• Classes podem ser organizadas em hierarquias de forma
que classes mais específicas herdem métodos de classes
mais abstratas
• Diagramas de hierarquia de classes
Classe: Cadeira
subclasses
Cadeira de Escritório
Cadeira de Balanço
Programação Orientada a Objeto - Aula 1
14
Abstração
• É o processo de capturar o comportamento essencial e
características e colocá-las de uma forma conveniente para
organizar a hierarquia de classes.
• Exemplo:
– Veículo (Sub-classes: Terrestre, Marinho e Aéreo)
• Classes abstratas nunca são instanciadas
– Decorrência da sua natureza genérica
– Exemplo : Nada é um “veículo” genericamente, mas sim um veículo
terreste, marinho ou aéreo.
Programação Orientada a Objeto - Aula 1
15
Sobrecarga
• Mesmo nome, mas número ou tipo de parâmetros diferentes.
• Para sobrecarregar uma função, basta declarar os vários tipos que
ela pode ter.
• Exemplo : classe carro, método frear.
– Se receber um parâmetro, indica a força que temos que aplicar no pedal.
– Se não receber nenhum parâmetro, indica que temos que parar o carro.
• Também é aplicável a operadores
• Exemplo: operador +
2 + 3 (adição inteira)
3.2 + 2.5 (adição real)
Programação Orientada a Objeto - Aula 1
16
Polimorfismo
• Esconder procedimentos alternativos por trás de uma interface comum.
• Polimorfismo vem do grego e significa “muitas formas.”
• Isto permite que se tenha uma interface comum que esconde detalhes de
implementação
• Exemplo : método frear.
– Tem uma implementação na classe base (carro).
– Tem outra implementação na classe filha (ferrari).
• A função da classe filha se sobrepõe (overrides) à da classe mãe
Programação Orientada a Objeto - Aula 1
17
Polimorfismo  Sobrecarga
• Com polimorfismo, nós decidimos qual dos métodos será
usado em tempo de execução (exemplo claro de binding
dinâmico).
• Com sobrecarga, podemos decidir qual dos métodos será
usado em tempo de compilação, distinguindo pelos
parâmetros passados.
– O processo de escolha da função correta pelo compilador é chamado
de resolução de sobrecarga (overload resolution)
Programação Orientada a Objeto - Aula 1
18
Programas Java
• Programas Java consistem em classes, que são formadas por atributos
e métodos que realizam tarefas e retornam informações quando
apropriado.
• Isto é, para fazer seus programas Java, você precisa desenvolver
classes que chamarão outras classes, e assim por diante.
• Logo, precisamos aprender como desenvolver nossas próprias classes
em Java para que possamos implementar soluções para nossos
problemas.
Programação Orientada a Objeto - Aula 1
19
Programando OO em Java
• O núcleo da LP é pequeno, mas existem várias bibliotecas de classes
que fornecem várias funcionalidades adicionais para a LP.
• Em Java usamos uma abordagem de blocos de construção,
reutilizando os softwares já existentes. Isto fará com que:
– Seus programas tenham melhor desempenho, pois normalmente as classes préprogramadas são mais otimizadas do que o seu código pessoal.
– Melhore a portabilidade do seu programa, pois estará usando classes e métodos
que são incluídos em praticamente todas as implementações do Java
– Você economize tempo de programação.
Programação Orientada a Objeto - Aula 1
20
A Linguagem de Programação Java
• Onde encontrar informação
– Inventada pela Sun Microsystems
– http://java.sun.com
• O código Java é compilado para um código de nível médio (byte code), que é
independente de máquina e precisa então ser interpretedado por um
interpretador Java.
Compilador
Java
Código Fonte
Java
Arquivo Class Interpretador
Java
Executar
Java
Programa
Programação Orientada a Objeto - Aula 1
21
Editando seus programas
• Um arquivo fonte Java é 100% texto puro.
• Você pode editá-lo usando qualquer editor de texto de sua
preferência (notepad, vi, emacs, edit, etc).
• Existem ambientes IDE, como Netbeans (escrito em Java e
gratuito para usos não comerciais), Jbuilder, Visual Café e o
Visual J++
• Os arquivos fonte devem ter extensão .java
Programação Orientada a Objeto - Aula 1
22
Editando seus programas
• Java é uma linguagem de formato livro. Isto quer dizer que não
necessitamos de espaços em branco, identação ou pulo de linha
para que o compilador entenda nossos códigos.
Como em qualquer linugagem, devemos programa
em Java buscando sempre o máximo de clareza
para facilitar a compreensão e a manutenção
posteriores. Assim sendo, apesar de não serem
obrigatórios, a identação, pulos de linha e
espaços em branco são altamente recomendados
Programação Orientada a Objeto - Aula 1
23
Breve introdução ao Java
• Vamos ver agora dois exemplos que nos permitirão ter uma idéia
de como programar em Java.
• Entretanto, vários conceitos serão omitidos neste momento.
• Não há motivo para estresse ou para começar a pensar em destruir
seu computador - nós vamos ver tudo detalhadamente ainda neste
curso!
Programação Orientada a Objeto - Aula 1
24
Primeiro Exemplo em Java
//Este é o nosso primeiro exemplo em Java
public class HelloWorld
{
public static void main (String[] args)
{
System.out.println("Hello World!");
}
}
Programação Orientada a Objeto - Aula 1
25
Conceitos vistos no exemplo
• //  São iniciadores de comentários em uma linha (como no C++).
• Em Java também podemos ter comentários delimitados por /* e */,
como no C.
• Os comentários marcados por // são preferíveis por poderem ser
lidos pela ferramenta javadoc, que veremos neste curso se tivermos
tempo.
Não há necessidade de correr com a matéria, mas há
muito para se ver em Java. Logo, quanto mais adiante
formos, mais vocês aprenderão.
Programação Orientada a Objeto - Aula 1
26
Conceitos vistos no exemplo
• public class HelloWorld
– Esta linha é uma definição de classe.
– Todo programa em Java consiste em uma ou mais classes definidas pelo
programador (ou pelo usuário).
– A palavra chave class introduz uma definição de classe em Java e é
imediatamente seguida pelo nome da classe.
– Notas importantes:
O nome da classe segue é um identificador
As palavras chaves em Java são palavras reservadas
Java faz diferenciação entre maiúsculas e minúsculas (HelloWorld  Helloworld)
Programação Orientada a Objeto - Aula 1
27
Conceitos vistos no exemplo
• public class HelloWorld
– public é um modificador de visibilidade
– Toda classe public deve estar gravada em um arquivo cujo
nome é o mesmo da classe (neste caso, HelloWorld.java)
 Assim, não podemos ter duas classes public no mesmo
arquivo.
 Vamos ver como contornar isto mais a frente.
– Todo arquivo java deve terminar com a extensão .java
Programação Orientada a Objeto - Aula 1
28
Conceitos vistos no exemplo
• {}
– Os blocos de comando são definidos pelas chaves, como no C e no C++
– Vocês notarão muitos pontos em comum entre o Java e estas linguagens.
• public static void main (String[] args)
– Todo aplicativo Java deve ter um método main, onde ele é iniciado.
– Se não tiver, o interpretador Java não executará a sua classe.
– Como no C, a palavra chave void indica que o método não retorna nenhum
valor.
Programação Orientada a Objeto - Aula 1
29
Conceitos vistos no exemplo
• public static void main (String[] args)
– O public é um modificador de visibilidade (faz o método ser público).
– O static diz que o método pertence à classe e não aos seus objetos
Vamos ver estes conceitos com
mais detalhes mais adiante!
Programação Orientada a Objeto - Aula 1
30
Conceitos vistos no exemplo
• System.out.println("Hello World!");
– System.out é o objeto de saída padrão
– Ele permite aos aplicativos Java escrever na janela de comando a partir do
qual o aplicativo Java é executado.
– O método println imprime uma linha colocando um CRLF no fim.
– O método print faz o mesmo, só que sem o CRLF
 Os caracteres de escape \n, \t, etc. que conhecíamos do printf também valem
para o print e para o println.
Programação Orientada a Objeto - Aula 1
31
Como compilar o código usando JDK?
Janela MSDOS
O arquivo fonte
“.java” deve sempre
ter esta extensão
Executando o
compilador
Arquivo
“.class”
gerado
Programação Orientada a Objeto - Aula 1
32
Aplicativos Java
• Existem dois tipos de programas Java:
– Aplicativos :
programas semelhantes a processador de textos, planilhas, etc. que
normalmente são armazenados e executados localmente.
são carregados na memória usando-se o interpretador Java.
– Applets :
programas pequenos que normalmente são armazenados em um
computador ao qual o usuário se conecta remotamente via web.
São carregados e executados via appletviewer e precisam ser chamados
através de uma página html.
Programação Orientada a Objeto - Aula 1
33
Como executar o código?
Executando o
interpretador
Java
Saída do
programa e
término
Programação Orientada a Objeto - Aula 1
34
Importante
• O diretório onde ficam o compilador (javac) e o interpretador (java)
Java deve ser acrescentado ao PATH do DOS
• Se formos re-utilizar classes que nós mesmos criamos, devemos
colocar seus diretórios no CLASSPATH do DOS
Vamos voltar a este tema mais adiante neste curso.
• As duas mudanças podem ser feitas no próprio AUTOEXEC.BAT,
para que quando o micro seja ligado, elas sejam automaticamente
implementadas.
• O diretório corrente não necessariamente estará sendo buscado pelo
interpretador java. Acerte as variáveis de ambiente.
Programação Orientada a Objeto - Aula 1
35
Segundo exemplo
//Este é o nosso segundo exemplo em Java
import javax.swing.JOptionPane;
public class HelloWorld
{
public static void main (String[] args)
{
JOptionPane.showMessageDialog(null,
"Hello World!");
System.exit(0);
}
}
Programação Orientada a Objeto - Aula 1
36
Conceitos vistos neste exemplo
• import javax.swing.JOptionPane;
– Esta instrução serve para identificar e carregar classes requeridas para
compilar um programa java.
– Existem muitas classes prontas em Java, como a classe Swing que contém
elementos que nos ajudam a definir interfaces gráficas com os usuários.
– Existem elementos para diálogos, botões, janelas, etc.
Se tivermos tempo, veremos também as interfaces
gráficas ao fim deste curso. Mas não vamos correr
mais por causa disto!
Programação Orientada a Objeto - Aula 1
37
Biblioteca de classes
• Uma biblioteca de classes é uma coleção de classes que podemos
usar quando desenvolvemos programas.
• Existe uma biblioteca padrão de classes Java que é parte de
qualquer ambiente de desenvolvimento Java
• Estas classes não são parteda linguagem Java per se, mas nós
nos baseamos bastante nelas.
As bibliotecas de classes Java
são equivalente às bibliotecas do C
Programação Orientada a Objeto - Aula 1
38
Biblioteca de classes
• Várias classes que usaremos, como a System e a String são
parte da biblioteca padrão de classes Java
• Outras bibliotecas de classes podem ser adquiridas com
fabricantes de software ou criadas por você mesmo.
Não seja teimoso!
Desenvolver novamente classes já existentes
é simplesmente tolice - causa erros e perda de
performance!
Programação Orientada a Objeto - Aula 1
39
Pacotes
• As classes da biblioteca padrão Java são organizadas em
pacotes.
• Alguns dos pacotes da biblioteca padrão são:
Pacote
Propósito
java.lang
java.applet
java.awt
javax.swing
java.net
java.util
Suporte genérico
Criar applets para a web
Interfaces gráficas e gráficos
Capacidades e componetes gráficos adicionais
Comunicação em rede
Utilidades variadas
Programação Orientada a Objeto - Aula 1
40
A declaração import
• Quando queremos usar uma classe de um pacote, pode usar
seu nome totalmente qualificado
java.util.Random
• Outra opção é importar a classe, e depois usar o nome da
classe:
import java.util.Random;
• Para importar todas as classes em um pacote específico, você
pode usar o caracter curinga *
import java.util.*;
Programação Orientada a Objeto - Aula 1
41
A declaração import
• Todas as classes do pacote java.lang são automaticamente
importadas em nossos programas
• É por isto que não precisamos de um import no primeiro
exemplo.
Não é necessário estourar a cabeça
tentando entender a fundo agora os
conceitos de classes e pacotes. Nós
os veremos com mais cuidado mais
a frente neste curso!
Programação Orientada a Objeto - Aula 1
42
Conceitos vistos neste exemplo
• System.exit(0);
– Esta instrução serve para finalizar o nosso programa.
– Todo programa com interface gráfica precisa ser finalizado desta
forma, para que termine corretamente.
– Caso não o façamos, nossa janela de comando não voltará a
funcionar corretamente.
Programação Orientada a Objeto - Aula 1
43
Pergunta razoável
Se eu preciso importar um arquivo para usar a classe
JOptionPane, porque não preciso importar uma
classe para usar a classe System e seu objeto out?
Programação Orientada a Objeto - Aula 1
44
Resposta
A classe System é parte do pacote java.lang
Lembre-se que este pacote padrão é importado
automaticamente em todo programa Java
Programação Orientada a Objeto - Aula 1
45
Terceiro exemplo
import javax.swing.JOptionPane;
public class Soma1 {
public static void main (String[] args)
{
int n1,n2,soma;
String s1,s2;
s1=JOptionPane.showInputDialog(“Prim Num. :");
s2=JOptionPane.showInputDialog(“Seg. Num. :");
n1=Integer.parseInt(s1);
n2=Integer.parseInt(s2);
soma=n1+n2;
JOptionPane.showMessageDialog(null,“A soma é”+soma);
System.exit(0);
}
}
Programação Orientada a Objeto - Aula 1
46
Conceitos vistos neste exemplo
• import javax.swing.JOptionPane;
– Esta instrução serve para identificar e carregar classes requeridas para
compilar um programa java, informando ao compilador onde pode encontrálas (no caso, no diretório javax).
• public class Soma1 {
– Inicia as definições da classe Soma1.
– Como é uma classe pública, ela deve estar em um arquivo denominado
Soma1.java
– A chave indica o começo do bloco de definições. Não esqueça que ela tem que
ser fechada quando este terminar.
Programação Orientada a Objeto - Aula 1
47
Conceitos vistos neste exemplo
Declarações de variáveis
– Como em todas as linguagens compiladas, precisamos declarar as variáveis
que usamos.
– Declarações consistem do tipo da variável, seu nome e um ponto-e-vírgula.
– Se tivermos mais de uma variável do mesmo tipo, podemos colocá-las na
mesma declaração, separadas por vírgulas.
– É boa prática de programação dar para as variáveis nomes descritivos da sua
verdadeira função.
Programação Orientada a Objeto - Aula 1
48
Conceitos vistos neste exemplo
• int n1,n2,soma;
– Estamos declarando variáveis do tipo inteiro.
– Existem outros tipos numéricos, para armazenar números racionais (float e
double).
• String s1,s2;
– Estamos declarando objetos da classe String.
Como dissemos antes, não vamos nos aprofundar nos
conceitos de Java neste momento. Mais a frente nós
discutiremos todos estes conceitos mais profundamente.
Programação Orientada a Objeto - Aula 1
49
Conceitos vistos neste exemplo
• s1=JOptionPane.showInputDialog(”Prim Num. :");
– Estamos usando um método da classe JOptionPane que realiza uma entrada de
dados.
– Este método retorna uma string.
• n1=Integer.parseInt(s1);
– Java é uma linguagem muito mais rigorosamente tipada do que o C.
– Não é possível realizar typecasting automático na maioria dos casos.
– Temos que chamar uma função (no caso um método da classe Integer) para
poder converte a string entrada na instrução anterior em um inteiro para
realizarmos a soma.
Existe o tipo int e a classe Integer, que
é denominada uma “wrapper class” do
tipo. Mais à frente veremos isto com
detalhes.
Programação Orientada a Objeto - Aula 1
50
Quarto exemplo
import javax.swing.JOptionPane;
public class Max1 {
public static void main (String[] args)
{
int n1,n2,max;
n1=Integer.parseInt(JOptionPane.showInputDialog(“Prim Num. :"));
n2=Integer.parseInt(JOptionPane.showInputDialog(“Seg Num. :"));
if (n1>n2) {
max=n1;
} else {
max=n2;
}
JOptionPane.showMessageDialog(null,“O máximo é ”+max);
System.exit(0);
}
}
Programação Orientada a Objeto - Aula 1
51
Conceitos vistos neste exemplo
• if (n1>n2) {
– O if é uma statement condicional, que permite que tomemos
decisões/escolhamos um curso de ação em nossos programas.
– A statement if tem o seguinte formato:
if (condição) statement1 else statement2
– onde:
condição é uma expressão booleana (lógica)
statement1 é executada se a condição é avaliada como verdadeira.
statement2 é executada se a condição é avaliada como falsa.
– A cláusula else é opcional
A statement1 e a statement2 podem ser substituídas
por um bloco de statements, mas neste caso não
podemos esquecer das chaves em torno deste bloco.
Programação Orientada a Objeto - Aula 1
52
Quinto Exemplo
import javax.swing.JOptionPane;
public class Max1 {
public static void main (String[] args)
{
int i,soma;
i=1;
soma=0;
while (i<=10) {
soma+=Integer.parseInt(JOptionPane.showInputDialog(“Num :"));
i++;
}
JOptionPane.showMessageDialog(null,“A soma é ”+soma);
System.exit(0);
}
}
Programação Orientada a Objeto - Aula 1
53
Conceitos vistos neste exemplo
• while (i<=10) {
– Statements de repetição nos permitem repetir ações dentro de nossos
programas
– Existem três tipos de estruturas de repetição em Java
for statement
do statement
while statement
Compromisso:
Veremos todas
com cuidado
depois!
Programação Orientada a Objeto - Aula 1
54
Conceitos vistos neste exemplo
• O comando while permite que um statement (ou bloco de
statements) seja repetido até que uma determinada condição seja
verdadeira.
• Formato geral:
– while(condition){ statement(s) }
• Onde:
– condição é uma expressão booleana
– a(s) statement(s) sendo repetidas alteram o valor da condição para false em
algum momento
Programação Orientada a Objeto - Aula 1
55
Comportamento do while
• Na primeira vez que o loop é executado, a condição é avaliada. Se
ela for falsa, não se executa as statements dentro do loop nenhuma
vez.
• Se for verdadeira, executam-se todas as statements do loop e voltase para o começo para avaliar a condição novamente.
• Este passo é repetido até que a condição seja falsa.
Isto implica que as statements podem executar qualquer
número de vezes (de zero a infinito!)
Programação Orientada a Objeto - Aula 1
56
Fim da aula
Já temos uma boa introdução.
Melhorem-na, fazendo os exercícios!
Programação Orientada a Objeto - Aula 1
57
Download

Introdução à Orientação a Objetos