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