Análise de Programação Conceitos Avançados da Linguagem de Programação Java Prof Gilberto B Oliveira
Encapsulamento Proteger o dado dentro de uma classe (capsula segura) Facilita o uso da classe por outros programadores Protege certos dados contra alterações indevidas Modificadores mais comuns aplicados a métodos e atributos: public Qualquer classe de qualquer lugar pode acessar; private Ninguém pode acessar, exceto a própria classe
Modificadores Modificador Classe Pacote Sub Classe Livre private X default X X protected X X X public X X X X Interface: Métodos e variáveis públicas Implementação Maneira como a classe executa uma operação Boas práticas de POO permitem alterar a implementação sem alterar a interface das classes
Métodos get e set A A implementação de métodos usados para proteger atributos privados é comum em POO Método get() Permite criar uma saída mais adequada ao dado armazenado Método set(tipo arg) Permite controlar de maneira mais eficaz o dado a ser armazenado no atributo antes de atribuí-lo
Implementação de classe não encapsulada Classe Funcionário: public class Funcionario { public String nome; public double salario; public void identificarfuncionario(){ Systemoutprintln("Nome: " + nome); Systemoutprintln("Salário: " + salario);
Quebrando as regras de negócio Sem o encapsulamento outra classe acessa o salário da classe funcionário e atribui um salário menor do que o salário mínimo atual no Brasil: public class TesteFuncionario { public static void main(string[] args){ Funcionario f1 = new Funcionario(); f1salario = 45000;
Método Get O O método get gera uma saída mais inteligível para o usuário: public String getnome(){ if(thisnomecharat(thisnomelength() - 1) == 'a'){ return "Sra " + thisnome; else { return "Sr " + thisnome;
Método Set(arg) O O método set permite um tratamento mais eficaz: public void setsalario(double salario){ if(salario < 510){ Systemoutprintln( Salário inapropriado! ); else { thissalario = salario;
Método Construtor São invocados automaticamente ao instanciar objetos; Normalmente são usados para inicializar atributos Sintaxe: [modificador] class NomeClasse { [modificador] NomeClasse([argumentos] [argumentos]){ bloco_codigo;
Exemplo: Método construtor simples: public Funcionario() { thissetnome("funcionario"); thissetsalario(5100); O O método construtor pode ser sobrecarregado permitindo a inicialização de várias formas
Exemplo2: Método construtor sobrecarregado: public Funcionario() { thissetnome("funcionario"); thissetsalario(5100); public Funcionario(String nome){ thissetnome(nome); thissetsalario(5100); public Funcionario(double salario){ thissetsalario(salario); thissetnome("funcionario");
Sintaxe: Declaração de vetores de uma dimensão Sintaxe: tipo [] nomevetor; Exemplos com tipos primitivos: char [] codcor; double [] preco; Exemplos com tipos objetos: Camisa [] minhacamisa; Date [] agenda;
Instancia de vetores de uma dimensão: Sintaxe: Sintaxe: nomevetor = new tipo [comprimento]; Exemplos com tipos primitivos: codcor = new char[5]; preco = new double[3]; Exemplos com tipos objetos: minhacamisa = new Camisa[2]; agenda = new Date[7];
Sintaxe: Inicializando vetores de uma dimensão Sintaxe: nomevetor[indice] = valor; Exemplo com tipos primitivos codcor[0] = 'P'; codcor[1] = 'V'; codcor[4] = 'A';
Inicializando vetores de uma dimensão Exemplo com tipos objeto: minhacamisa[0] = new Camisa(); minhacamisa[1] = new Camisa( T-Shirt ); Outro exemplo: agenda[0] = new Date(); agenda[1] = new Date(2010, 05, 18); agenda[6] = new Date( 2010/11/21 );
Declarar, instanciar e inicializar Sintaxe: Sintaxe: tipo [] nomevetor = {item0,, itemn; Exemplo com tipos primitivos: double [] preco = {125, 135, 130; char [] codcor = {'A', 'P', 'V', 'B', 'R'; Exemplo com tipos objetos: Camisa [] minhacamisa = {new Camisa(), new Camisa( T-Shirt ), new Camisa( Polo, 'M'); Date [] agenda = {new Date( 2010/07/10 ), new Date(2010, 03, 21), new Date();
Acessando valores contidos em vetores Inserindo um valor em uma posição do vetor: codcor[3] = 'W'; agenda[0] = new Date( 2010/07/30 ); preco[2] = 245; minhacamisa = new Camisa( Social, 'G'); Retirando valores de uma posição do vetor: Date d = agenda[0]; char c = codcor[3]; double p = preco[1]; Camisa c1 = minhacamisa[2];
Comportamento da Memória (primitivos) char [] codcor = {'P', 'B', 'V'; char tamanho = 'M'; 0@B25X32 P B V M Pilha Stack Aleatória Heap
Comportamento da Memória Camisa [] suacamisa = {new Camisa( Social ), new Camisa('P'), new Camisa( Polo, 'M'); Camisa minhacamisa = new Camisa(); 0@B25X32 0@X56622 Pilha Stack 0@B12345 0@D23456 0@F34567 T-Shirt B M Social B M T-Shirt P M Polo B G Aleatória Heap
Exemplo: Atribuição de valores através de laço Exemplo: int [] meuvetor; meuvetor = new int[100]; for(int i = 0; i < meuvetorlength length; ; i++){ meuvetor[i] = i;
Exemplo Laço for melhorado public class ExemploFor { public static void main(string[] args) { int [] num = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int soma = 0; for(int item : num) ) { soma += item; Systemoutprintln( Soma: + soma);
Varargs Criação de métodos que recebem uma quantidade de argumentos variada public class MensagemVar { public static void minhamensagem(string nome){ for(string lista : nome) { Systemoutprintln(lista); public static void main(string [] args) { minhamensagem(args);
Vetores multidimensionais Sintaxe de criação: tipo [] [] nomevetor; Exemplo: Exemplo: int [] [] notabim; Sintaxe de instância: nomevetor = new int [numvetores] [comp]; Exemplo Exemplo notabim = int[5][4];
Exemplo de vetor multidimensional João José Maria Joana Joaquina 1 Bim 2 Bim 3 Bim 4 Bim
Atribuição Exemplo de atribuição de valores às posições dos vetores: notabim[0] [0] = 5; notabim[0] [1] = 7; notabim[0] [2] = 9; notabim[1] [3] = 5; notabim[2] [2] = 10; notabim[3] [0] = 7;
Atribuição em vetor multidimensional 1 Bim 2 Bim 3 Bim 4 Bim João 5 7 9 José 5 Maria 10 Joana 7 Joaquina
Herança (inheritance) Sintaxe para a criação de subclasses: [modificado] class NomeSubClasse extends NomeSuperClasse Permite criar classes mais especializadas a partir de classes generalistas Classes generalistas são superclasses e classes especializadas subclasses Classes generalistas carregam atributos e métodos que são herdados pela(s) subclasse(s) Quanto mais abstratas forem as classes de um sistema, mais abrangente ele será, portanto, melhor construído
Pacotes da API Java API Application Programming Interface Abstract Windowing Toolkit: Usada para construir e gerenciar uma GUI (Graphic User Interface): javaawt*; Comportamentos específicos de Applet javaapplet*; Permite executar operações relacionadas a rede javanet*; Pacote com classes utilitárias, permite gerar números randômicos, data e hora, etc javautil*;
Importando pacotes: Usando uma declaração import import javaawt*; public class MeuBotao extends Button { //Implementação da classe Usando o nome qualificador da classe completo public class MeuBotao extends javaawtbutton { //implementação da classe