570 likes | 600 Views
Explore the essential concepts of Object-Oriented Programming (OOP), including objects, classes, inheritance, methods, and more. Delve into the history and evolution of OOP languages like Smalltalk-80, C++, Java, and their impact on software design. Understand the importance of encapsulation, polymorphism, and abstraction in OOP.
E N D
Introdução à Orientação a ObjetosProf. Ricardo Linden Programação Orientada a Objeto - Aula 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
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
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
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
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
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
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
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
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
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
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
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
Classe: Cadeira 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 subclasses Cadeira de Escritório Cadeira de Balanço Programação Orientada a Objeto - Aula 1
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
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
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
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
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
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
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 Arquivo Class Java Interpretador Java Código Fonte Java Executar Programa Programação Orientada a Objeto - Aula 1
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
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
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
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
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
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
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
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
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
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
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
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
Como executar o código? Executando o interpretador Java Saída do programa e término Programação Orientada a Objeto - Aula 1
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
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
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
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
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
Pacotes • As classes da biblioteca padrão Java são organizadas em pacotes. • Alguns dos pacotes da biblioteca padrão são: Propósito 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 Pacote java.lang java.applet java.awt javax.swing java.net java.util Programação Orientada a Objeto - Aula 1
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
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
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
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
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
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
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
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
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
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