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. Classificação Lâmpada Lâmpada1 Lâmpada2 Instanciação 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 lerplaca classe Ferrari IDN8810 objeto1 Fiat Uno IAS3333 objeto2 instâncias 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 java.exe PC UNIX 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; long l=i; byte short int long long l=1; int i=l; Erro!!! byte 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 e x pow(x,y): x elevado a potência y (x y ) 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) { if (condição) { else { if (condição) { else if (condição) { else { 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: break;... default: 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) { 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) { Ex.: int i = 0; while (i<10) { System.out.println( i= + i); i++; do...while Tem a seguinte forma: do { 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