Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes [email protected] Colaboração: Prof. Ricardo Santos Aula 07 - Manipulação de Arrays http://www.ufpa.br/sampaio/bd2003/lpoo Marco Fagundes 1 de 32 Roteiro Revisão dos Objetos e Meta do Módulo de Fundamentos Revisão do Básico de Java e Delphi • Estrutura de Programas • Tratamento de Operações • Declaração de Variáveis • Tipos de Dados e Estruturas de Controle Declarando e Construindo Arrays 2 de 32 Módulo de Fundamentos Módulo de Fundamentos • Objetivo: Apresentar conceitos básicos e avançados da orientação a objetos, os ambientes Java e Delphi e sua utilização no desenvolvimento de GUIs • Meta: Desenvolver uma aplicação (Java ou Delphi) com uma GUI oferecendo as operações básicas de cadastro (incluir, excluir, alterar e consultar) utilizando uma estrutura de dados para armazenar objetos 3 de 32 Módulo de Fundamentos Conteúdo O que foi visto?? • Conceitos da Orientação a Objetos • Ambiente JDK e Delphi • Construção de GUI em Java e Delphi • Programação Orientada a Eventos • Estrutura de Dados (Array) e Tipo String • Classe, Objeto, Atributos e Métodos • Compartilhamento de Recursos (Dados e Operações) entre Classes • Recursos Avançados de GUI e Criação de Objetos 4 de 32 Módulo de Fundamentos Duração: 13 Aulas • Início: 01/04/2003 • Término: 29/04/2003 Datas Importantes • Entrega do 1º Exercício: 23/04/2003 • Exame Escrito:29/04/2003 • Entrega da 1ª Etapa do Projeto Final: 06/05/2003 5 de 32 Destaques da Aula 1 Qualidade de Software • Atributos de qualidade: Corretude, Eficiência, Manutenibilidade Portabilidade, Reusabilidade, Robustez, Extensibilidade, Integridade e Usabilidade • Os fatores extensibilidade e reusabilidade estão diretamente relacionados à manutenção de sistemas. Estima-se que 70% do custo de software corresponde à manutenção Paradigmas de Programação • Imperativo • Orientado a Objetos • Funcional • Lógico Linguagens OO: Formalmente, para ser considerada uma linguagem OO, esta precisa implementar quatro conceitos importantes: abstração, encapsulamento, herança e polimorfismo 6 de 32 Destaques da Aula 2 - Estrutura de Programas Java Unit Delphi class <nome> { <declarações>; public static void main (<parametro>) { <declarações>; <instruções>; }//fim main interface uses | const | type | var }// fim class end. implementation uses | const | type | var initialization <instruções>; finalization <instruções>; Somente se a classe for executável 7 de 32 Destaques da Aula 2 - Operações Java class <nome> { <declarações>; Tipo_Retorno Nome_Método (<param>) { <declarações>; <instruções>; }// fim Nome_Método Unit Delphi interface uses | const | type | var public procedure <nome>(<param>); function <nome>(<param>): tipo; implementation uses | const | type | var <definição_procedure>; ...(main - caso deseje execução) }// fim class Se o Tipo_Retorno for void então o método é similar a um procedimento. Caso contrário o método se parece com uma função, necessitando do valor de retorno. Assim uma instrução obrigatória é: return <resultado>; <definição_function>; ...(initialization, Finalization) end. Shift+ Ctrl + C constroi o corpo do procedimento/função. 8 de 32 Destaques da Aula 2 - Operações Java class <nome> { <declarações>; Variáveis de Instância Tipo_Retorno Nome_Método (<param>) { <declarações>; Variáveis de Locais <instruções>; }// fim Nome_Método ...(main - caso deseje execução) }// fim class Unit Delphi interface uses | const | type | var Variáveis public Globais ...; implementation uses | const | type | var procedure <nome_classe>.<nome>(<param>); var ... begin Variáveis <instruções>; Locais end; function <nome_classe>.<nome>(<param>): tipo; var ... begin <instruções>; result:= <resultado>; end; ... 9 de 32 end. Destaques da Aula 2 - Exemplo de Operações Java class <nome> { <declarações>; void exibeMsg ( ) { System.out.println (‘Exemplo Msg’); }// fim int somarVal (int v1, int v2); { return v1 + v2; }// fim Unit Delphi interface uses | const | type | var implementation uses | const | type | var procedure <nome_classe>.exibeMsg; begin showMessage(‘Exemplo Msg’); end; function <nome-classe> somarVal(v1,v2:integer):integer; begin result:=v1+v2; end; ...(initialization, Finalization) ...(main - caso deseje execução) }// fim class end. 10 de 32 Destaque da Aula 2 - Testando Operações em Java Compilando class Teste { void exibeMsg (String pMsg ) { System.out.println (pMsg); } int somarVal (int v1, int v2) Executando { return v1 + v2; }/ public static void main(String[ ] args) { Teste t = new Teste(); Resultado t.exibeMsg(‘Exemplo Msg’); System.out.println (t.somarVal(50,70)); } //fim main Crie um diretório para }// fim class aplicação Salve a aplicação para o diretório criado 11 de 32 Destaques da Aula 2 - Testando Operações em Delphi Crie um novo projeto no Delphi Adicione um TButton ao Form Altere as propriedades Name e Caption do Botão Crie um diretório para a aplicação Salve o projeto/units para o diretório criado 12 de 32 Destaques da Aula 2 - Testando Operações em Delphi Definindo Procedures/Functions interface ... public procedure exibeMsg (pMsg:String); function somarVal (v1,v2: integer): integer; implementation ... procedure TForm1.exibeMsg(pMsg:String); begin showMessage(‘Exemplo Msg’); end; function TForm1.somarVal(v1,v2:integer): integer; begin result:=v1+v2; end; end. 13 de 32 Destaques da Aula 2 - Testando Operações em Delphi Programando o Manipulador de eventos do Botão Dar um duplo clique em cima do componente Botão ... procedure TForm1.btnTesteMsgClick(Sender: TObject); begin exibeMsg(‘Exemplo Msg’); showMessage(intToStr(somarVal(1,2))); end; end. Resultado da Execução 14 de 32 Destaques da Aula 2 - Declaração de Variáveis Variáveis Java class <nome> { <Tipo_Variável> <Nome_Variável>; Tipo_Ret Nome_Método (<param>) { <Tipo_Variável> <Nome_Variável>; <instruções>; } }// fim class Exemplo Java Variáveis Delphi Variável de class <nome> { Instância String codTurma; public static void main (<parametro>) { int contador; Variável <instruções>; Local }//fim main }// fim class interface uses | const | type | var implementation uses | const | type var <Nome_Variável>:<Tipo_Variável>; ... end. Exemplo Delphi interface uses | const | type | var implementation uses | const | type var contador: integer; Variável Global ... end. 15 de 32 Destaques da Aula 2 - Tipos de Dados Tipos Primitivos Java •Numéricos (byte, short, int, long, double e float) obs: Não confundir com as Classes Integer, Double, Long ... •boolean (true e false) •Char (‘ ...’ ) •Caracteres sem representação visual Ex: \n \t \’ \” \\ • Estrutura de Dados (Array) int a[ ]; (declarando) a = new int[10]; (definindo) Tipos Primitivos Delphi •Numéricos (Integer,Longint,Byte, Real, Double) •Boolean (true e false) •Char(‘.’) e String (‘...’) •Operações: Length(String) • Estrutura de Dados (Array) Type (declarando tipo) TintList = array[1..100] of integer; Var (declarando variável) arList: TintList; 16 de 32 Destaques da Aula 2 - Estruturas de Controle Estruturas de Decisão Java • if(condição) <instrução>; else --->opcional <instrução>; Exemplo: if (i==5) System.out.println(“i = 5”); if (s.equals(“Teste”)) { Instrução i=3; Composta ou a=“OK”; em Bloco } else i=0; Estruturas de Decisão Delphi • if (condição) then <instrução> else <instrução>; Diferente do Java, o “;” fecha o comando if Exemplo: if (i=5) then showMessage(“i = 5”); if (s = ‘Teste’) begin i=3; a=“OK”; end else i=0; Instrução Composta ou em Bloco 17 de 32 Destaques da Aula 2 - Estruturas de Controle Estruturas de Decisão Java • switch(variável)...case(valor) Exemplo: switch(i) { case 0: System.out.println(“zero”); break; case 1: System.out.println(“um”); break; default:System.out.println(“pad”); } Estruturas de Decisão Delphi • case<variável> of valores:<instrução>; else <instrução>; end; Exemplo: case (i) of case 0: showMessage(“zero”); case 1: showMessage(“um”); else showMessage(“padrão”); end; 18 de 32 Destaques da Aula 2 - Estruturas de Controle Estruturas de Repetição Estruturas de Decisão Delphi • while (condição) <instrução>; • while (condição) do <instrução> Exemplo: int i=0, s=10; Exemplo: while (i<10) { Instrução s = s + i; Composta ou i++; em Bloco } System.out.println(i+s); i=0; s=10; while (i<10) do begin s = s + i; i++; end; Instrução Composta ou em Bloco showMessage(IntToStr (i+s)); 19 de 32 Arrays Arrays são objetos que armazenam variáveis do mesmo tipo. Pode armazenar tanto variáveis de tipos primitivos quanto referências a objetos. Os arrays são sempre tratados como objetos, mesmo que eles sejam utilizados para armazenar tipos primitivos. 20 de 32 Arrays Todos os arrays Java são tecnicamente unimensionais. Arrays bidimensionais são implementados como arrays de arrays. A declaração de um array não cria um objeto array ou aloca espaço em memória. Na verdade, ela cria uma variável de referência a um array. 21 de 32 Declarando Arrays Existem diversas formas de declaração: String[]s; String []s; String [] s; String [ ] s; String[] s; String[ ] s; String s[]; String s []; String s [ ]; String[][]s; String []s[]; String[][] [] s; String [ ] [ ]s; String[] s[][]; String[ ] s[][ ]; String s[][]; String s [][][]; String[][] s [ ]; 22 de 32 Declarando Arrays Existem diversas formas de declaração: String[]s; String []s; String [] s; String [ ] s; String[] s; String[ ] s; String s[]; String s []; String s [ ]; String[] s[]; String[][]s; String s [] [ ]; // extra white space ignored // extra white space ignored // extra white space ignored // extra white space ignored 23 de 32 Construindo Arrays Não inclua o tamanho do array nas declarações: int[5] testArray; // Errado! Todos os arrays são zero-based. Arrays devem ser indexados por valores inteiros. Ao acessarmos um array com um índice menor que 0 ou maior que o comprimento do array gera uma exceção ArrayIndexOutOfBoundsException em tempo de execução. 24 de 32 Construindo Arrays Uma vez que os arrays são Objetos, eles podem ser inicializados com a palavra reservada new. Os arrays são automaticamente inicializados com o valor padrão do tipo em questão. String[] s = new String[100]; boolean[] b = new boolean[4]; int[] i = new int[10][10]; 25 de 32 Construindo Arrays int[] testScores; testScores = new int[4]; testScores 0 0 0 0 0 1 2 3 Valores objeto array int [ ] Índices 26 de 32 Construindo Arrays Em Java, os arrays são alocados em tempo de execução, de forma que podemos utilizar o seguinte código: int arrSize = 100; String[] myArray = new String[arrSize]; 27 de 32 Construindo Arrays No caso de “Arrays de Objetos”, o que temos na verdade é um array de Referências a Objetos. arrayObjs Objeto - - - 0 1 2 Objeto Objeto 28 de 32 Inicializando Arrays Inicializando com chaves. String[] oneDimArray = { "abc","def","xyz" }; int[] arr = new int[] {1,2,3}; int[][] twoDimArray = { {1,2,3}, {4,5,6}, {7,8,9} }; int[][] myArray = new int[5][]; Inicializando por elemento. int[] arr = new int[2]; arr[0] = 2; arr[1] = 1; 29 de 32 Inicializando Arrays Inicializando por elemento. int[][] scores = new int[3][]; scores[0] = new int[4]; scores[1] = new int[6]; scores[2] = new int[1]; 30 de 32 Inicializando Arrays Inicializando com loop. int [] myArray = new int[3] for(int i=0; i<(myArray.length); i++){ myArray[i] = i; } 31 de 32 Inicializando Arrays No caso de Arrays Dimensionais temos: myArray array int[][] - - null 0 1 array int[][] 2 myArray[0] myArray[1] int [][] myArray = new int[3][]; myArray[0] = new int[2]; myArray[0][0] = 6; myArray[0][1] = 7; myArray[1] = new int[3]; myArray[1][0] = 9; myArray[1][1] = 8; myArray[1][2] = 5;. 6 7 9 8 5 0 0 1 int[] 1 2 int[] 32 de 32