Algoritmos e Programação 2 Baseado no material do Prof. Júlio Pereira Machado Introdução à Programação Orientada a Objetos O que é um paradigma de programação? – É um padrão conceitual que orienta soluções de projeto e implementação. – Paradigmas explicam como os elementos que compõem um programa são organizados e como interagem entre si. • Exs.: procedural, funcional, orientado a objetos Orientação a Objetos É baseada na modelagem de objetos do mundo real. O que é um objeto? – Uma abstração de um objeto do mundo real. – Uma estrutura composta de dados e operações. 1 Objetos Cada objeto possui características (dados) e comportamento (operações). – Ex.: lâmpada • características: ligada (sim/não), potência, voltagem, etc. • comportamento: ligar, desligar, queimar, etc. Um programa orientado a objetos é estruturado como uma comunidade de objetos que interagem entre si. Cada objeto tem um papel a cumprir. Cada objeto oferece um serviço ou realiza uma ação que é usada por outros membros da comunidade. Encapsulamento É um dos conceitos básicos de OO. A idéia de uma “caixa preta”: – não é necessário saber os detalhes de funcionamento interno, mas sim como utilizar. Encapsular é esconder como as coisas funcionam por trás de uma interface externa. – Ex.: caixa automático • Como ele é implementado internamente? • Utilizamos através de operações bem conhecidas 2 Operações (Métodos) •Interface pública declara as operações permitidas •Público Dados (Atributos) objeto •Acesso aos dados é feito através da chamada de um método •Privado Mensagens Objetos interagem entre si através do envio de mensagens. Um objeto chama um método de outro objeto. – O objeto emissor requisita a execução de um determinado método ao objeto receptor. obj1 MENSAGEM •Identificar o objeto receptor •Identificar o método que o objeto deverá executar •Passar os argumentos necessários obj2 3 Classes Uma classe é uma “fôrma” para produzir objetos. Determina um conjunto de objetos com: – propriedades semelhantes – comportamentos semelhantes – relacionamentos comuns com outros objetos Instanciar objetos significa gerar novos exemplares a partir de uma descrição abstrata de um objeto genérico. – Objetos são instâncias de uma classe. Lâmpada Classificação Instanciação Lâmpada1 Lâmpada2 Classes X Instâncias X Objetos Objetos são gerados a partir de classes. Uma classe define as propriedades e o comportamento dos objetos gerados por ela. Todo objeto é uma instância de uma classe. 4 veículos veículo Marca Placa Ferrari IDN8810 objeto1 lerPlaca classe instâncias Fiat Uno IAS3333 objeto2 Exemplo Java public class Veiculo { private String marca; private String placa; Atributos ... public String lerPlaca(){ return placa; } Método } Resumo Conceitos OO Objeto – unidade básica de orientação a objetos. Um objeto é uma entidade que tem atributos, comportamento e identidade. Objetos são membros de uma classe e os atributos e o comportamento (métodos) de um objeto são definidos pela definição da classe. Classe – uma classe é uma descrição de um conjunto de objetos. Este conjunto de objetos compartilha atributos e comportamento em comum. Uma definição de classe descreve todos os atributos dos objetos membros da classe, bem como os métodos que implementam o comportamento destes membros. 5 Orientação a objetos – um método de desenvolvimento de software que usa abstração com objetos, classes encapsuladas e comunicação por mensagens, hierarquia de classes e polimorfismo. Abstração – um modelo de um conceito ou objeto do mundo real. Encapsulamento – processo de esconder os detalhes internos de um objeto do mundo externo. Atributo – usado para armazenar o estado de um objeto. Pode ser simples como uma variável escalar (int, char, double, ou boolean) ou pode ser uma estrutura complexa tal como outro objeto. Comportamento – atividade de um objeto que é vista do ponto de vista do mundo externo. Inclui como um objeto responde a mensagens alterando seu estado interno ou retornando informação sobre seu estado interno. Método – uma operação ou serviço executado sobre o objeto, declarado como parte da estrutura da classe. Métodos são usados para implementar o comportamento do objeto. Estado – reflete os valores correntes de todos os atributos de um objeto e são o resultado do comportamento do objeto ao longo do tempo. Introdução Java Histórico da linguagem – 1991 • Patrick Naughton, Mike Sheridan e James Gosling criaram a linguagem em 1991, no GreenProject da Sun • O objetivo do era desenvolver software para controlar eletrodomésticos (TVs interativas, torradeiras interativas, etc.) 6 • Idéia inicial era utilizar C++ • Objetivos: linguagem pequena, eficiente e facilmente portável • A linguagem deveria permitir a construção de programas que pudessem executar em diferentes arquiteturas sem a necessidade de se re-escrever código. • Foi criada a linguagem Oak, que com o crescimento da Internet deu origem a Java – Potencial de criar páginas na Web com conteúdo dinâmico. – 1994 • Criado o navegador HotJava que permitia executar applets Java – 1995 • Em maio, John Gage, diretor da Sun Microsystems e Marc Andreessen, da Netscape, anunciaram que a linguagem já era realidade e seria incorporada ao Navigator • Em novembro, a linguagem Java foi disponibilizada pela 1ª vez no JDK 1.0 – 1997 • JDK 1.1 traz novas APIs para tratamento de eventos, acesso a banco de dados, interfaces gráficas, etc – 1999 • JDK 1.2 ou Java 2 • Correção de bugs, otimização e sedimentação dos conceitos Observação: – A partir da versão 1.2, o JDK (Java Development Kit) recebeu a denominação de SDK (System Development Kit). 7 Plataforma Java J2SE (Java 2 Platform, Standard Edition) – Desenvolvimento e execução de applets, aplicações stand-alone ou aplicações cliente J2EE (Java 2 Platform, Enterprise Edition) – Reúne um conjunto de tecnologias em uma arquitetura voltada para o desenvolvimento de aplicações servidoras J2ME (Java 2 Platform, Micro Edition) – Fornece um ambiente de execução otimizado e permite escrever programas cliente que são executados em pequenos dispositivos sem-fio (smart cards, telefones celulares, pagers, ...) Características – Java é tanto uma linguagem de programação de alto nível quanto uma plataforma de desenvolvimento de sistemas. – Existem basicamente 3 tipos de programas em Java: • Aplicações (programas normais ordinários) – De console: suportam saída em modo texto – De janela: cria e gerencia múltiplas janelas, usa mecanismos de GUI (Graphical User Interface) para programação em janelas • Applets (programas em web pages) – pequenos programas embutidos em páginas HTML – executa no cliente dentro de um navegador • Servlets (aplicações cliente-servidor) – executa no servidor (ao contrário dos applets) – estende a funcionalidade de um servidor 8 Ambiente Java Java é tanto compilada quanto interpretada. – O compilador transforma o programa em bytecodes. – Bytecodes são instruções de máquina compreendidas pela Java Virtual Machine. – A Java Virtual Machine é um interpretador que transforma as instruções bytecodes em linguagem de máquina. Programa Java minhaClasse.java Compilador javac.exe Bytecode minhaClasse.class Interpretador JVM PC UNIX java.exe MAC 9 C X Java C X Java Ambientes de programação – BlueJ • Ambiente voltado para o ensino de Java e Orientação a Objetos • Disponibilizado gratuitamente na Internet • http://www.bluej.org • Necessita do SDK instalado para funcionar – Eclipse • Ambiente integrado para o desenvolvimento profissional de software • Disponibilizado gratuitamente na Internet http://www.eclipse.org • Necessita do SDK instalado para funcionar 10 Ambiente de Execução – J2SE deve ser utilizado por desenvolvedores – Para apenas executar programas em Java, a Sun disponibiliza o JRE (Java Runtime Environment) Estrutura de um programa Um programa Java é um conjunto composto por uma ou mais classes. Tipicamente, cada classe é implementada em um arquivo fonte separado, sendo que o arquivo deve ter o mesmo nome da classe. – Ex.: a classe Veiculo deve estar definida no arquivo Veiculo.java Em geral, os arquivos que compõem um programa java devem estar no mesmo diretório. Biblioteca de classes (API) Application Programming Interface É uma coleção de classes, normalmente provendo uma série de facilidades que podem ser usadas em programas. Classes são agrupadas em conjuntos chamados packages. Exs: – java.lang: inclui classes básicas, manipulação de arrays e strings. Este pacote é carregado automaticamente pelo programa – java.io: operações de input e output – java.awt: suportam aplicativos em janelas (windowed) – java.util: classes diversas para manipulação de dados 11 Ambiente de Programação Sun disponibiliza gratuitamente – http://java.sun.com J2SE – Disponível para vários sistemas operacionais – Contém: compilador, depurador, biblioteca de classes e a máquina virtual – Não oferece editor ou ambiente visual integrado Tipos de Dados Básicos Tipos de dados primitivos – inteiros: byte (8 bits), short (16), int (32), long (64) • 1 (decimal) , 07 (octal), 0xff (hexadecimal) – reais: float (32), double (64) • 3.0F, 4.02E23, 3.0 – caractere: char (16) • ‘a’, ‘\141’, ‘\u0061’, ‘\n’ – booleano: boolean (8) • true, false Em Java, tem-se dois tipos de conversão de valores: – conversão para um tipo maior • automática – conversão para um tipo menor (chamada de casting) • não é automática int i=1; byte long l=i; short int long long l=1; byte int i=l; Erro!!! short int long 12 Para converter de um tipo para um tipo menor, precisamos referenciar de forma explícita. – (tipo Java) expressão; – Ex.: • long l = 1; int i = (int) l; • byte b1=1, b2=2, b3; b3 = (byte)(b1 + b2); – Cuidado! Ao somar dois valores byte iguais a 100, o resultado é o int 200. Ao realizar o cast para byte, o resultado é convertido para -56, o equivalente ao padrão de bits armazenados. Operadores Operadores básicos: – aritméticos: +, -, *, /, % (resto da divisão) – relacionais: >, >=, <, <= – igualdade: ==, != – lógicos: &&, & (and), ||, | (or), ^ (xor), ! (not) – atribuição: =, +=, -=, *=, /=, %= – incremento, decremento: ++, -- Funções matemáticas (classe Math): – sqrt(x): cálculo da raiz quadrada de x (x é do tipo double) – abs(x): valor absoluto de x (x pode ser float, int, long) – ceil(x): arredonda x para o menor inteiro não menor que x (ceil(9.2)=10.0, ceil(-9.8)=-9.0) – cos(x): coseno trigonométrico de x (x em radianos) – exp(x): método exponencial ex – pow(x,y): x elevado a potência y (xy) Exemplo: double raio; raio = Math.sqrt(area/Math.PI); 13 Cuidado: – O resultado da operação de divisão em Java depende do tipo dos operandos. • Tipo inteiro: o resultado é a divisão inteira int resultado = 10/4 //igual a 2 • Tipo ponto flutuante: o resultado é a divisão “normal” float resultado = 10f/4f //igual a 2,5 Comandos Declaração – Variáveis: • int valor1, valor2 = 123; • double taxa, percentual; – Constantes: • final double PI = 3.1415; if – Condicionais são escritos da seguinte forma: • if (condição) { comandos; } • if (condição) { comandos; } else { comandos; } • if (condição) { comandos; } else if (condição) { comandos; } else { comandos; } 14 if (i % 2 == 0) { System.out.println(“Par”); } else { System.out.println(“Ímpar”); } if (vel >= 25) { if (vel > 65) { System.out.println(“maior 65”); } else { System.out.println(“maior 25”); } } else { System.out.println(“menor 25”); } switch...case – Utilizado para cobrir múltiplas escolhas sobre valores alternativos de variáveis int, byte, short, long ou char. – Escreve-se da seguinte forma: • switch (expressão) { case constante1: comandos; break; ... default: comandos; } switch (menuItem){ case 0: System.out.println(“zero”); break; case 1: System.out.println(“um”); break; default: System.out.println(“inválido”); } switch (nota){ case ‘A’: case ‘B’: case ‘C’: System.out.println(“Passou”); break; default: System.out.println(“Reprovou”); } 15 for – Tem a seguinte forma: • for (inicialização; condição; alteração) { comandos; } – Ex.: int soma = 0; for (int i=1; i<=3; i++) { sum += i; } System.out.println(“Soma “+soma); while – Tem a seguinte forma: • while (condição) { comandos; } – Ex.: int i = 0; while (i<10) { System.out.println(“i= “ i++; } + i); do...while – Tem a seguinte forma: • do { comandos; } while (condição); – Ex.: int i = 0; do { System.out.println(“i= “+i); i++; } while (i<10); 16 Classe String String – É uma classe e não tipo primitivo. – Representa um grupo de caracteres. – Declarados entre aspas duplas • String nome = "Júlio"; • String nome = new String(“Júlio”); Conversão – Java converte outros tipos para strings • int idade = 25; String nomeIdade = nome + " " + idade; Operadores – concatenação: + • String nomeCompleto = nome + " " + "Machado”; – comparação: equals • String str1 = "texto"; String str2 = "txt"; if(str1.equals(str2)){} //compara conteúdo Métodos úteis – Tamanho: • Método length() • String texto1 = "Início"; System.out.println(texto1.length()) ; --> 6 – Caractere em uma posição: • Método charAt(posição) • char c = texto1.charAt(1); --> n 17 – Substrings: • Método substring(início,fim) • String texto1 = "Início"; String sub = texto1.substring(1,3) --> ní – Conversão: • Métodos parseXXX de cada classe do tipo original • int i = Integer.parseInt("123"); • double d = Double.parseDouble("1.3"); 18