Programação Orientada a Objeto - Aula 11 Introdução à Orientação a Objetos Prof. Ricardo...
Transcript of Programação Orientada a Objeto - Aula 11 Introdução à Orientação a Objetos Prof. Ricardo...
Programação Orientada a Objeto - Aula 1 1
Introdução à Orientação a Objetos
Prof. Ricardo Linden
Programação Orientada a Objeto - Aula 1 2
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 3
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 comopensamos no “mundo real”
Programação Orientada a Objeto - Aula 1 4
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:
– Objeto
– Classe
– Instância
– Método
– Mensagem
–Sub-classe–Herança–Abstração–Encapsulamento–Polimorfismo
Programação Orientada a Objeto - Aula 1 5
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 6
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 7
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 8
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 9
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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
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 18
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 19
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 20
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 21
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.
Código Fonte Java
CompiladorJava
Arquivo ClassJava
InterpretadorJava Executar
Programa
ExecutarPrograma
Programação Orientada a Objeto - Aula 1 22
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 23
• 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.
Editando seus programas
Como em qualquer linugagem, devemos programaem Java buscando sempre o máximo de clarezapara facilitar a compreensão e a manutenção
posteriores. Assim sendo, apesar de não seremobrigatórios, a identação, pulos de linha e
espaços em branco são altamente recomendados
Programação Orientada a Objeto - Aula 1 24
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 25
Primeiro Exemplo em Java
//Este é o nosso primeiro exemplo em Javapublic class HelloWorld { public static void main (String[] args)
{System.out.println("Hello World!");
}}
Programação Orientada a Objeto - Aula 1 26
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 27
• 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 identificadorAs palavras chaves em Java são palavras reservadas Java faz diferenciação entre maiúsculas e minúsculas (HelloWorld
Helloworld)
Conceitos vistos no exemplo
Programação Orientada a Objeto - Aula 1 28
• 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
Conceitos vistos no exemplo
Programação Orientada a Objeto - Aula 1 29
• { }– 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.
Conceitos vistos no exemplo
Programação Orientada a Objeto - Aula 1 30
• 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
Conceitos vistos no exemplo
Vamos ver estes conceitos commais detalhes mais adiante!
Programação Orientada a Objeto - Aula 1 31
• 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.
Conceitos vistos no exemplo
Programação Orientada a Objeto - Aula 1 32
Como compilar o código usando JDK?
Janela MS-DOS
O arquivo fonte “.java” deve sempre ter esta extensão
Executando o compilador
Arquivo “.class” gerado
Programação Orientada a Objeto - Aula 1 33
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 34
Como executar o código?
Executando o interpretador Java
Saída do programa e término
Programação Orientada a Objeto - Aula 1 35
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 36
Segundo exemplo
//Este é o nosso segundo exemplo em Javaimport 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 37
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 38
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 Javasão equivalente às bibliotecas do C
Programação Orientada a Objeto - Aula 1 39
• 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.
Biblioteca de classes
Não seja teimoso!Desenvolver novamente classes já existentes é simplesmente tolice - causa erros e perda de
performance!
Programação Orientada a Objeto - Aula 1 40
Pacotes
• As classes da biblioteca padrão Java são organizadas em pacotes.
• Alguns dos pacotes da biblioteca padrão são:
Pacote
java.langjava.appletjava.awtjavax.swingjava.netjava.util
Propósito
Suporte genéricoCriar applets para a webInterfaces gráficas e gráficosCapacidades e componetes gráficos adicionaisComunicação em redeUtilidades variadas
Programação Orientada a Objeto - Aula 1 41
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 42
• 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.
A declaração import
Não é necessário estourar a cabeçatentando entender a fundo agora osconceitos de classes e pacotes. Nósos veremos com mais cuidado maisa frente neste curso!
Programação Orientada a Objeto - Aula 1 43
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 44
Pergunta razoável
Se eu preciso importar um arquivo para usar a classeJOptionPane, porque não preciso importar uma
classe para usar a classe System e seu objeto out?
Programação Orientada a Objeto - Aula 1 45
Resposta
A classe System é parte do pacote java.langLembre-se que este pacote padrão é importado
automaticamente em todo programa Java
Programação Orientada a Objeto - Aula 1 46
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 47
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 48
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 49
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 50
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 51
Quarto exemploimport 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 52
• 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
Conceitos vistos neste exemplo
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 53
Quinto Exemploimport 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 54
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 statementdo statementwhile statement
Compromisso:Veremos todascom cuidado depois!
Programação Orientada a Objeto - Aula 1 55
• 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
Conceitos vistos neste exemplo
Programação Orientada a Objeto - Aula 1 56
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 volta-se 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 57
Fim da aula
Já temos uma boa introdução.
Melhorem-na, fazendo os exercícios!