Introdução à Programação Orientada a Objetos Programação e Sistemas de Informação
Paradigmas de programação (1) Um paradigma de programação fornece (e determina) a visão que o programador possui sobre a estruturação e execução do programa. 2 Programação procedural Cobol Programação estruturada Pascal, C, Algol Programação orientada a objectos Smalltalk, C++, Java Programação orientada a eventos Visual Basic
Paradigmas de programação (2) Programação estruturada organiza o código através de subprogramas (procedimentos e funções) e recorrendo apenas a três estruturas de controlo: sequenciação, decisão e repetição. 3 Programação orientada a objectos organiza o código em objectos que são autónomos e trocam mensagens entre si durante a execução do programa, imitando o comportamento dos objectos do mundo real.
Tecnologia Java (1) Uma linguagem de programação; Um ambiente de desenvolvimento; Um ambiente de execução; Um ambiente de distribuição. 4
Tecnologia Java (2) Uma linguagem de programação: Utilizada para criar todos os tipos de aplicações através do JSE, JEE e JME. JSE (Java Standard Edition) concentra o núcleo de funcionalidades básicas do Java, sendo adequado na programação de aplicações para desktops e servidores. JEE (Java Enterprise Edition) possui módulos do JSE e adiciona diversas APIs para, entre outras, a programação de aplicações para a Web. 5 JME (Java Micro Edition) destinado à programação de aplicações para telemóveis, PDAs, entre outros.
Tecnologia Java (3) Um ambiente de desenvolvimento: Fornece um grande conjunto de ferramentas: Compilador Executável javac.exe Interpretador Executável java.exe Gerador de documentos Executável javadoc.exe Empacotamento de classes e ficheiros Executável jar.exe 6
Tecnologia Java (4) Um ambiente de execução: Permite a execução de diversas aplicações em máquinas onde o JRE esteja instalado. JRE (Java Runtime Environment) como o próprio nome indica é o Ambiente de Execução Java, constituído pela JVM e pelas bibliotecas Java. JVM (Java Virtual Machine) máquina imaginária que emula uma aplicação em uma máquina real. 7
Tecnologia Java (5) Um ambiente de distribuição: Existem dois ambientes de distribuição principais: JRE Browsers 8
Java como linguagem de programação (1) Criada em 1991 por James Gosling da Sun Microsystems. Esteve para denominar-se Oak (Carvalho) devido à árvore que era visível através da janela de James Gosling. 9 O nome foi mudado para Java porque já existia uma linguagem de programação com o nome Oak.
Java como linguagem de programação (2) Características: (1) Orientada a objectos: desde o início que foi projectada para ser orientada a objectos. Familiar: é muito familiar para os programadores C/C++. Simples: a aprendizagem pode ser feita num curto espaço de tempo. 10
Java como linguagem de programação (3) Características: (2) Robusta: foi pensada para o desenvolvimento de aplicações confiáveis, fornecendo verificações durante a compilação e em tempo de execução. 11 O colector de lixo (garbage collection) responsabiliza-se pela limpeza da memória, libertando assim o programador desta tarefa.
Java como linguagem de programação (4) Características: (3) Segura: as aplicações Java são executadas em ambiente próprio (JRE) o que inviabiliza a intrusão de código malicioso; 12 Portável: os programas desenvolvidos nesta linguagem podem ser executados em praticamente qualquer máquina desde que esta possua o JRE instalado.
Fases de um programa Java (1) 13 1. Criação do código fonte (Programa.java); 2. Compilação do código fonte e geração do bytecode (Programa.class); 3. Interpretação do bytecode pela JVM que funciona então como interpretador; 4. Conversão do bytecode em linguagem máquina.
Fases de um programa Java (2) Ao contrário de outras aplicações, que são compiladas directamente para o código da máquina em que serão executadas, em Java estas somente são transformadas em código máquina em tempo de execução. 14 Este mecanismo permite desenvolver aplicações sem a preocupação do local onde estas serão executadas pois, desde que exista uma JVM instalada, o código será executável.
15 Fases de um programa Java (3)
Fases de um programa Java (4) As informações, relativas ao ambiente no qual uma aplicação Java é executada, são utilizadas pela JVM para fazer optimizações em tempo de execução e, havendo necessidade, o código que está a ser interpretado é transformado em instruções nativas do sistema operativo (código máquina) através do compilador JIT (Just In Time). 16
Programar em Java (1) 1. Fazer o download do JDK: http://java.sun.com/javase/downloads/index.jsp JDK (Java Development Kit) composto pelo JRE e por um conjunto de ferramentas úteis ao programador Java. 2. Instalar o JDK 3. Configurar as variáveis de ambiente 17
Programar em Java (2) 4. Instalar um IDE IDE (Integrated Development Environment) programa que reúne características e ferramentas de apoio ao desenvolvimento de software com o objectivo de agilizar este processo. BlueJ (www.bluej.org) NetBeans (www.netbeans.org) 18 Eclipse (www.eclipse.org)
19 Programar em Java (3)
Regras para escrita de programas em Java (1) Os programas em Java podem assumir três modalidades: Applications, Applets e Servlets. Qualquer programa é organizado em um ou mais ficheiros com a extensão.java contendo apenas uma classe pública cada um. O nome do ficheiro tem que ser exatamente igual ao nome da classe pública que este contém. O Java é totalmente CASE-SENSITIVE, ou seja, distingue as maiúsculas das minúsculas, sendo que meunome é totalmente diferente de MeuNome. 20
Regras para escrita de programas em Java (2) A Sun convencionou o seguinte no que diz respeito a nomes: Classes e Interfaces: A primeira letra deve ser maiúscula e, caso o nome seja formado por mais de uma palavra, as primeiras letras das demais palavras também devem ser maiúsculas. Métodos e Variáveis: A primeira letra deve ser minúscula e após esta aplicar o camelcase. 21 Constantes: Todas as letras devem ser maiúsculas e caso o nome seja formado por mais do que uma palavra estas devem ser separadas por underscore.
Tipos de dados Tipos primitivos boolean char, byte, short, int, long float, double 22 Tipos referência Arrays Classes Interfaces
Tipos primitivos (1) Conversões sem perda de informação (1) byte short, int, long, float ou double short int, long, float ou double char int, long, float ou double int long, float ou double long float ou double float double 23
Tipos primitivos (2) Conversões sem perda de informação (2) 24
Tipos primitivos (3) Conversões com perda de informação As conversões explícitas são efectuadas através do casting. Estas conversões são permitidas em todos os tipos de dados (excepto o boolean), mas o programador deve estar ciente que poderá haver perda de bits. Exemplo int x = 3 short y = (short) x 25
Ficha de Trabalho Nº1 Compreender as conversões entre tipos primitivos. 26
Tipos referência (1) Arrays Objectos que armazenam um número pré-definido de elementos que são acedidos através de índices sempre iniciados em 0. A utilização de arrays implica três etapas: Declaração: a referência do array é declarada Construção: é definido o tamanho e instanciado o array 27 Inicialização: os elementos são inseridos no array
Tipos referência (2) Classes Este tipo referência será abordado posteriormente. Interfaces Este tipo referência será abordado posteriormente. 28
Ficha de Trabalho Nº2 Compreender a utilização dos tipos referência arrays. 29
Operadores principais (1) Operadores aritméticos: 30 Operador Descrição ++ Pré/pós-incremento -- Pré/pós-decremento + Sinal + - Sinal - * Multiplicação / Divisão % Módulo (Resto) + Soma - Subtracção
Operadores principais (2) Operadores relacionais: 31 Operador > Maior que < Menor que >= Maior ou igual a <= Menor ou igual a == Igual a!= Diferente de? : Operador ternário instanceof Descrição Retorna true se o objecto da esquerda for uma instância do objecto da direita
Operadores principais (3) Operadores lógicos: Operador Descrição! (não) Negação && (e) Conjunção (ou) Disjunção ^ (não ou) Disjunção exclusiva 32
Estruturas de controlo (1) if if (expressão booleana) instrução_simples; if (expressão booleana) { instruções } Quando existe apenas uma instrução após o if não é necessário abrir um bloco com as chavetas. 33 Se existirem mais instruções a abertura do bloco é necessária.
Estruturas de controlo (2) if else if (expressão booleana) { instruções } else if (expressão booleana) { instruções } else { instruções } Quando existe apenas uma instrução após o if não é necessário abrir um bloco com as chavetas. 34 Quando houver mais do que uma condição usa-se o else.
Estruturas de controlo (3) while while (expressão booleana) { instruções; } 35 No while o teste é feito à cabeça. Quando existe apenas uma instrução após o while não é necessário abrir um bloco com as chavetas.
Estruturas de controlo (4) do while do { instruções; } while (expressão booleana); No do-while o teste é feito à cauda. Quando existe apenas uma instrução após o do não é necessário abrir um bloco com as chavetas. 36
Estruturas de controlo (5) for for (inicialização; expressões booleanas; passo da repetição) instrução_simples; for (inicialização; expressões booleanas; passo da repetição) { instruções; } Quando existe apenas uma instrução após o for não é necessário abrir um bloco com as chavetas. 37
Estruturas de controlo (6) break e continue break interrompe o ciclo while, do-while ou for. continue interrompe uma iteração e reinicia o bloco com a próxima iteração. 38 while (!terminado) { passarpagina(); if (alguemchamou == true) break; //sai do ciclo if (paginapublicidade == true) continue; //salta esta iteração lerpagina(); } restodoprograma();
Estruturas de controlo (7) rótulo break Quando existem vários ciclos aninhados estes rótulos permitem interromper o ciclo mais externo. 39 revista: while (!terminado) { } for (int i=10; i<100; i++) { } passarpagina(); if (textochato == true) break revista; //sai do ciclo while maisintruções(); restodoprograma(); O break sem rótulo sairia apenas do ciclo for
Estruturas de controlo (8) switch switch(valor) { case valor1 : instruções; break; case valor2 : instruções; break;... default: instruções; } 40 O switch só trabalha com valores inteiros e char.
Pacotes (1) Um pacote em Java é um directório em que está armazenada uma ou mais classes. Os pacotes costumam agrupar classes das mesmas afinidades. Existem inúmeros pacotes em Java sendo dois dos mais utilizados o java.lang e java.util. 41 Para além dos pacotes já existentes o utilizador pode criar pacotes próprios.
Pacotes (2) As classes definidas nos pacotes podem ser empregadas em qualquer outra classe mediante a utilização da instrução import: import java.util.date //indica que será usada a classe Date do pacote java.util import java.util.* //indica que serão usadas todas as classes que pertencem ao pacote java.util Por predefinição o pacote java.lang é importado automaticamente pelo Java não sendo, por isso, necessário fazer o import do mesmo. 42
Entrada e Saída de dados (1) Classe Scanner do pacote java.util 43 import java.util.scanner; public class ModoTexto { } public static void main(string[] args) { } // cria a variável de leitura dos dados Scanner s = new Scanner(System.in); // usa os métodos de leitura específicos do tipo de dados desejado System.out.print( Insira uma frase: "); String linha = s.nextline(); // lê a linha System.out.print( A frase inserida foi +linha); System.out.print( Insira um numero inteiro: "); int num = s.nextint(); // lê um número inteiro System.out.print( O número inserido foi +num);
Entrada e Saída de dados (2) Classe JOptionPane do pacote javax.swing import javax.swing.joptionpane; public class ModoGrafico { public static void main(string[] args) { String nome; //Mostra uma caixa de diálogo que solicita a entrada de dados nome = JOptionPane.showInputDialog( Insira o seu nome: ); String mensagem = O nome inserido foi +nome; //Mostra uma caixa de diálogo com a mensagem JOptionPane.showMessageDialog(null, mensagem); } 44 }
Ficha de Trabalho Nº3 Aplicar a entrada de dados via teclado e a saída de dados via ecrã. 45
Objectos (1) Objectos são coisas que temos no mundo real e abstraímos no mundo virtual para que possamos manipulá-los na resolução de problemas. 46 Os objectos possuem estados e comportamentos que, na programação estruturada, são equivalentes aos dados e subprogramas e, na programação orientada aos objectos (POO), são equivalentes aos atributos e métodos.
Objectos (2) Objecto Atributos Métodos Pessoa nome, idade, género falar, andar Carro marca, modelo, cor acelerar, travar, abastecer Cão nome, raça latir, correr Todos os objectos são oriundos de classes, ou seja, são instâncias das classes. 47
Classes (1) Uma classe é uma especificação para um determinado tipo de objecto. Para que um objecto seja de determinada classe terá, obrigatoriamente, que respeitar a especificação da classe. Uma classe é um tipo de dados referência. 48
Classes (2) Pessoa pessoa1 pessoa2 nome Camila Mário idade 12 17 género F M 49 A coluna Pessoa define a classe enquanto as colunas pessoa1 e pessoa2 são os objectos dessa classe. Cada pessoa particular é uma instância da classe que terá um valor diferente para cada um dos atributos definidos na especificação da classe.
Classes (3) O código seguinte, que corresponde à classe Pessoa, define os atributos dos objectos daquela classe: class Pessoa { } //Atributos String nome; //Nome da Pessoa int idade; //Idade da Pessoa 50
Classes (4) O código seguinte, que corresponde à classe Pessoa, define os métodos dos objectos daquela classe: class Pessoa { } //Métodos void falar() { } System.out.println("Blá, Blá, Blá,..."); 51
Construtores (1) O construtor não é um método, mas antes, um bloco de código que é executado sempre que utilizamos a palavra reservada new. A sua única função é criar uma instância da classe (objecto). Quando o construtor não é explicitamente declarado o compilador insere o construtor default, isto é, um construtor sem parâmetros e com o corpo vazio. 52
Construtores (2) O código seguinte, que corresponde à classe Pessoa, define dois construtores para aquela classe: class Pessoa { //Construtores public Pessoa() { } //Construtor default 53 } public Pessoa(String nome, int idade) { this.nome = nome; this.idade = idade; }
Construtores (3) Cada instância da classe (objecto) ocupa um lugar diferente na memória. class UsaPessoa { } public static void main(string[] args) { Pessoa pessoa1 = new Pessoa( Ana, 12); Pessoa pessoa2 = new Pessoa( Rui, 15); } 54 Na verdade, pessoa1 e pessoa2 não contêm objectos do tipo Pessoa, mas antes, os endereços de memória onde estes se encontram guardados. Memória 253 254 255 256 257 Pessoa nome = Ana idade=12 Pessoa nome = Rui idade = 15
Ficha de Trabalho Nº4 Aplicar a entrada de dados via teclado e a saída de dados via ecrã. 55
Encapsulamento (1) Encapsulamento refere-se ao isolamento entre as partes do programa. Uma das principais formas de o fazer é proibindo o acesso directo aos atributos de um objecto por objectos externos. 56 Para limitar o acesso às classes ou aos membros do objecto (atributos e métodos) utilizamos os modificadores de acesso existentes em Java.
Encapsulamento (2) 57 Modificadores de acesso: public: as classes e membros são visíveis em qualquer lugar ; package: são visíveis em classes do mesmo pacote mas não nas suas subclasses. Na verdade, não existe um modificador com este nome, pois, a ausência de modificador torna-o packcage. protected: são visíveis na mesma classe e suas subclasses independentemente do pacote onde estas últimas se encontrem; private: são visíveis apenas dentro da mesma classe.
Encapsulamento (3) Normalmente, os métodos são públicos (public) e os atributos private (privados); Isto ocorre pois é desejável que os atributos de um objecto só possam ser alterados por ele mesmo, inviabilizando desta forma situações imprevistas. 58
Getters e Setters (1) Estes métodos são responsáveis por fornecer meios para modificar o estado de um objecto, isto é, meios para aceder e modificar os valores dos atributos de um objecto. Estes métodos apenas são criados se forem realmente necessários, ou seja, não se dará acesso aos atributos que não interessam a outros objectos mas interessam apenas ao próprio objecto. 59
Getters e Setters (2) A convenção para estes métodos é a seguinte: Getters: método que retorna o atributo e é na, maioria dos casos, composto pela palavra get[nome do atributo]. Ex: getidade(), getsalario() Quando o método retorna um valor do tipo boolean a convenção passa a ser palavra is[nome do atributo] 60
Getters e Setters (3) A convenção para estes métodos é a seguinte: Setters: método que atribui/modifica o valor de um atributo e é sempre composto pela palavra set[nome do atributo] e o parâmetro do mesmo tipo do atributo. Ex: setidade(int idade), setsalario(double salario) Utiliza-se a palavra reservada this para imputar ao atributo o valor que é passado como parâmetro. 61
Ficha de Trabalho Nº5 Compreender o conceito de Encapsulamento. 62
Referências Bibliográficas EIJE, Albert; BARROS, Cláudio; KOJIIO, Miguel. Curso Java Starter [online]. Disponível na Internet via WWW. URL http://www.t2ti.com/ curso/video/java/ basico/java_starter.php. Consultado em Março 2009 iped. Curso de Java [online]. Disponível na Internet via WWW. URL http://www.iped. com.br/curso/java/. Consultado em Março 2009 63