Aula 8Classes e instânciasCadeias de caracteres
Da aula anterior…Revisões2010/2011Introdução à Programação - DCTI - ISCTE-IUL2
Classes e instânciasClasseModelo para construção de instâncias que partilham conjunto de características observáveisPropriedadesOperaçõesInstância (ou objecto)Exemplar de classeConstruído e manipulado durante execução do programaTem identidade e estado próprios2010/2011Introdução à Programação - DCTI - ISCTE-IUL3Não classe pacote!
Classes (nãopacote)Nome (singular)Reflecte o que instâncias da classe representam (e.g., Point, Person, Game, Board, Player)Maiúscula inicial (convenção Java)Composição básica em JavaAtributosConstrutoresMétodos de instância (e não de classe)2010/2011Introdução à Programação - DCTI - ISCTE-IUL4Métodos de classe são static.
Classes: membros2010/2011Introdução à Programação - DCTI - ISCTE-IUL5
Classes: atributos e propriedadesAtributosVariáveis possuídas em exclusivo por cada instância de classeConjunto dos seus valores determinam estado de uma instânciaParte da implementação de uma classePropriedadesAcessíveis (em Java) através de operações da classeConjunto dos seus valores determinam estado observável de uma instânciaParte da interface de uma classeExemplosx e y como propriedades (e atributos) de Pointcardinality como propriedade (e atributo) de IntegerSetname como propriedade (e atributo) de Person2010/2011Introdução à Programação - DCTI - ISCTE-IUL6
Classes: atributos e propriedadespublic class Point {privatedouble x;privatedouble y;   …public double getX() {      return x;   }public double getY() {      return y;   }   …}public class IntegerSet {privateint[] items;privateint cardinality;   …publicint[] getItems() {      return Arrays.copyOf(items,                       cardinality);   }   …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL7atributosatributospropriedadespropriedadesInstâncias dePointInstâncias de IntegerSet(0; 0)(1; 1){-1, 0, 1}{ }{0, 2, 4}(2; -2)(2; 1){1, 2, 3, 5, 7, 9}(1; 7,2)
Classes: construtoresRotinas que constroem instância de uma classeInicializam atributosGarantem estado inicial válidoUma classe pode ter vários construtores, mas com diferentes assinaturaspublicclassPoint {privatedouble x;privatedouble y;publicPoint() {      x = 0.0;      y = 0.0;   }publicPoint(final double x,                final double y) {this.x = x;this.y = y;     }   … }2010/2011Introdução à Programação - DCTI - ISCTE-IUL8this: usado para desambiguar quando variáveis locais (e.g., parâmetros) tiverem mesmo nome que atributos.
Classes: instanciaçãoOperador newConstrói novas instânciasInvoca construtor da classeExemplosnewPoint()newPoint(1.0, -2.0)2010/2011Introdução à Programação - DCTI - ISCTE-IUL9public Point() {   x = 0.0;   y = 0.0;}1,0public Point(final double x,             final double y) {this.x = x;this.y = y;}-2,0
Classes: referênciasReferências são variáveisTêm tipo associadoReferem ou apontam instância desse tipoPodem não referenciar nada: valor nullExemploPoint point = new Point(3.0, 4.0);2010/2011Introdução à Programação - DCTI - ISCTE-IUL10point: Pointx = 3,0y = 4,0inicialização da referênciadefinição da referênciaconstrução da instância
Classes são tipos de referênciaTipos primitivos (int, double, etc.)Variáveis guardam valor desse tipoAtribuição altera valor guardadoSão tipos de valorClasses JavaVariáveis guardam referência para instância dessa classe (ou classe compatível)Atribuição altera referência guardadaAtribuição não altera a instância referenciadaSão tipos de referência2010/2011Introdução à Programação - DCTI - ISCTE-IUL11
Variáveis que guardam referências.Classes são tipos de referênciaTipos primitivos (int, boolean, etc.)int a = 7;int b = a;int c;Tipos de referência (matrizes, classes)Point a =newPoint(3.0, 4.0);Point b = a;Point c;2010/2011Introdução à Programação - DCTI - ISCTE-IUL12aa7Variáveis que guardam valores.bb: Point7x = 3,0y = 4,0ccExcepto no caso de variáveis locais. Variáveis locais têm sempre de ser inicializadas explicitamente.Excepto no caso de variáveis locais. Variáveis locais têm sempre de ser inicializadas explicitamente.0null
Igualdade vs. identidadeTipos primitivos (int, boolean, etc.)int a = 7;int b = a;Tipos de referência (matrizes, classes)Point a =newPoint(3.0, 4.0);Point b =newPoint(3.0, 4.0);Point c = b;2010/2011Introdução à Programação - DCTI - ISCTE-IUL13Operador == verifica se valores são iguais!aab7bc: Point: Pointa == b? Sim!7x = 3,0y = 4,0x = 3,0y = 4,0a == b? Não!c == b? Sim!Operador == verifica se referências são iguais! Ou seja, verifica se se referem à mesma instância!
Inicializações automáticasAtributos de classes e itens de matrizes de tipos primitivos inicializados com valor por omissão:int – 0double – 0.0boolean – false… Atributos de classes e itens de matrizes de tipos de referência inicializados com null2010/2011Introdução à Programação - DCTI - ISCTE-IUL14
Classes: operações e métodos de instânciaOperações realizam-se sobre uma instância da classeMétodos são implementação de operaçõesOperações podem serFunções – Calculam e devolvem um resultadoProcedimentos – Realizam uma acção2010/2011Introdução à Programação - DCTI - ISCTE-IUL15
Classes: funções e procedimentos de instânciaFunçõesConjunto de instruções, com interface bem definida, que efectua um dado cálculoDevolvem explicitamente um resultado ao exteriorNão devem efectuar qualquer alteração ao estado do objectoProcedimentosConjunto de instruções, com interface bem definida, que realiza uma determinada acção (normalmente alteram o estado da instância)Não devolvem explicitamente um resultado ao exterior 2010/2011Introdução à Programação - DCTI - ISCTE-IUL16
Classes: natureza das operações de instânciaInspectores (funções) – Acedem às propriedades da instânciaModificadores (procedimentos) – Agem sobre a instância, modificando-aFunções não inspectoras – Acedem às propriedades de terceirosProcedimentos não modificadores – Agem sobre terceiros2010/2011Introdução à Programação - DCTI - ISCTE-IUL17
Classes: funçõespublicclassNome {privatetipoatributo;    …publictiponome(parâmetros) {instruções        …returnexpressão;    }    …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL18os atributos não devem ser modificados pela funçãointerfaceimplementação
Classes: procedimentospublicclassNome {privatetipoatributo;    …publicvoidnome(parâmetros) {instruções        …returnexpressão;    }    …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL19os atributos podem ser modificados pelo procedimentointerfaceimplementação
Exemplo: calculadorapublicclassCalculator {privatedoublevalue;publicCalculator() {value = 0.0;   }publicdoublegetValue() {returnvalue;   }publicvoidsetValue(doublenewValue) {value = newValue;   }publicvoidclear() {value = 0.0;   }	publicvoidadd(doubleterm) {value += term;   }   …}Calculatorc = newCalculator();2010/2011Introdução à Programação - DCTI - ISCTE-IUL20c.getValue();cc.setValue(5);c.clear();c.add(10);
Classe vs. classe pacoteClasseMolde para construção de instânciaspublic class Calculator {    private int value;public Calculator() {…}    public int value() {…}    public void clear() {…}    …}Classe pacoteConjunto de métodos de classe relacionados empacotados num módulopublicclassMath {privateMath() {…}publicstaticdoublesin(doubleangle) {…}publicstaticdoublesqrt(doublevalue) {…}    …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL21
Classe StringRepresenta cadeias de caracteresInstâncias imutáveis, i.e., estado observável não muda após construçãoValores literaisCaracteres entre aspasSão referências para instâncias2010/2011Introdução à Programação - DCTI - ISCTE-IUL22Instâncias do tipoString“IP…”“IP não é tramado”“não é tramado, se praticarem!”
String: inicializaçãoUtilizar cadeias de caracteres literais optimiza memória e aumenta eficiênciaEvitar utilizar construir novas instânciasExemplo a evitarStringname =newString("ISCTE");Stringname= "ISCTE";2010/2011Introdução à Programação - DCTI - ISCTE-IUL23valor literal (referência para instância de String pré-existente)"ISCTE": Stringname“ISCTE”
String: comprimento e caracteresComprimentointlength= name.length();Caractere em determinada posiçãocharlastCharacter = s.charAt(4);2010/2011Introdução à Programação - DCTI - ISCTE-IUL24: StringnamelengthlastCharacter“ISCTE”5‘E’'I''S''C''T''E'01234: String
String: subcadeiasInicializaçãoStringiscteIul = "ISCTE-IUL";SubcadeiaStringiul = s.substring(6);Stringiscte = s.substring(0, 5);2010/2011Introdução à Programação - DCTI - ISCTE-IUL25iscteIuliuliscte'I''S''C''T''E''-''I''U''L''I''U''L''I''S''C''T''E'01234567801201234
String: concatenaçãoConcatenaçãoStringnewName= iscte.concat("-IUL");Concatenação simplificada (operador +)StringnewName = iscte + "-IUL";2010/2011Introdução à Programação - DCTI - ISCTE-IUL26isctenewName'I''S''C''T''E''I''S''C''T''E''-''I''U''L'01234012345678
String: Igualdade vs. identidadeTipos primitivos (int, boolean, etc.)int a = 7;int b = a;Tipos de referência (matrizes, classes)Stringa = "A";Stringb = "A";Stringc =newString("A");String d = c;2010/2011Introdução à Programação - DCTI - ISCTE-IUL27Operador == verifica se valores são iguais!aab"A"cd7ba == b? Sim!7a == b? Sim!a== c? Não!c == d? Sim.a.equals(b)? Sim.a.equals(c)? Sim!c.equals(d)? Sim.“A”“A”Operador == verifica se referências são iguais! Ou seja, verifica se se referem à mesma instância!
A reterClasses e instânciasInstanciaçãoMembrosPropriedades vs. atributosOperações vs. métodosConstrutoresFunções vs. procedimentosTipos de referência vs. tipos de valorTipos primitivos vs. restante tipos (em Java)Igualdade vs. identidadeCadeias de caracteres com a classe String2010/2011Introdução à Programação - DCTI - ISCTE-IUL28
A ler...Capítulos 8 e 9do livro:Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISBN: 978-0-13-213080-62010/2011Introdução à Programação - DCTI - ISCTE-IUL29
SumárioClasses e instânciasCadeias de caracteres2010/2011Introdução à Programação - DCTI - ISCTE-IUL30

Semana 8: Classes e instâncias, cadeias de caracteres

  • 1.
    Aula 8Classes einstânciasCadeias de caracteres
  • 2.
    Da aula anterior…Revisões2010/2011Introduçãoà Programação - DCTI - ISCTE-IUL2
  • 3.
    Classes e instânciasClasseModelopara construção de instâncias que partilham conjunto de características observáveisPropriedadesOperaçõesInstância (ou objecto)Exemplar de classeConstruído e manipulado durante execução do programaTem identidade e estado próprios2010/2011Introdução à Programação - DCTI - ISCTE-IUL3Não classe pacote!
  • 4.
    Classes (nãopacote)Nome (singular)Reflecteo que instâncias da classe representam (e.g., Point, Person, Game, Board, Player)Maiúscula inicial (convenção Java)Composição básica em JavaAtributosConstrutoresMétodos de instância (e não de classe)2010/2011Introdução à Programação - DCTI - ISCTE-IUL4Métodos de classe são static.
  • 5.
    Classes: membros2010/2011Introdução àProgramação - DCTI - ISCTE-IUL5
  • 6.
    Classes: atributos epropriedadesAtributosVariáveis possuídas em exclusivo por cada instância de classeConjunto dos seus valores determinam estado de uma instânciaParte da implementação de uma classePropriedadesAcessíveis (em Java) através de operações da classeConjunto dos seus valores determinam estado observável de uma instânciaParte da interface de uma classeExemplosx e y como propriedades (e atributos) de Pointcardinality como propriedade (e atributo) de IntegerSetname como propriedade (e atributo) de Person2010/2011Introdução à Programação - DCTI - ISCTE-IUL6
  • 7.
    Classes: atributos epropriedadespublic class Point {privatedouble x;privatedouble y; …public double getX() { return x; }public double getY() { return y; } …}public class IntegerSet {privateint[] items;privateint cardinality; …publicint[] getItems() { return Arrays.copyOf(items, cardinality); } …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL7atributosatributospropriedadespropriedadesInstâncias dePointInstâncias de IntegerSet(0; 0)(1; 1){-1, 0, 1}{ }{0, 2, 4}(2; -2)(2; 1){1, 2, 3, 5, 7, 9}(1; 7,2)
  • 8.
    Classes: construtoresRotinas queconstroem instância de uma classeInicializam atributosGarantem estado inicial válidoUma classe pode ter vários construtores, mas com diferentes assinaturaspublicclassPoint {privatedouble x;privatedouble y;publicPoint() { x = 0.0; y = 0.0; }publicPoint(final double x, final double y) {this.x = x;this.y = y; } … }2010/2011Introdução à Programação - DCTI - ISCTE-IUL8this: usado para desambiguar quando variáveis locais (e.g., parâmetros) tiverem mesmo nome que atributos.
  • 9.
    Classes: instanciaçãoOperador newConstróinovas instânciasInvoca construtor da classeExemplosnewPoint()newPoint(1.0, -2.0)2010/2011Introdução à Programação - DCTI - ISCTE-IUL9public Point() { x = 0.0; y = 0.0;}1,0public Point(final double x, final double y) {this.x = x;this.y = y;}-2,0
  • 10.
    Classes: referênciasReferências sãovariáveisTêm tipo associadoReferem ou apontam instância desse tipoPodem não referenciar nada: valor nullExemploPoint point = new Point(3.0, 4.0);2010/2011Introdução à Programação - DCTI - ISCTE-IUL10point: Pointx = 3,0y = 4,0inicialização da referênciadefinição da referênciaconstrução da instância
  • 11.
    Classes são tiposde referênciaTipos primitivos (int, double, etc.)Variáveis guardam valor desse tipoAtribuição altera valor guardadoSão tipos de valorClasses JavaVariáveis guardam referência para instância dessa classe (ou classe compatível)Atribuição altera referência guardadaAtribuição não altera a instância referenciadaSão tipos de referência2010/2011Introdução à Programação - DCTI - ISCTE-IUL11
  • 12.
    Variáveis que guardamreferências.Classes são tipos de referênciaTipos primitivos (int, boolean, etc.)int a = 7;int b = a;int c;Tipos de referência (matrizes, classes)Point a =newPoint(3.0, 4.0);Point b = a;Point c;2010/2011Introdução à Programação - DCTI - ISCTE-IUL12aa7Variáveis que guardam valores.bb: Point7x = 3,0y = 4,0ccExcepto no caso de variáveis locais. Variáveis locais têm sempre de ser inicializadas explicitamente.Excepto no caso de variáveis locais. Variáveis locais têm sempre de ser inicializadas explicitamente.0null
  • 13.
    Igualdade vs. identidadeTiposprimitivos (int, boolean, etc.)int a = 7;int b = a;Tipos de referência (matrizes, classes)Point a =newPoint(3.0, 4.0);Point b =newPoint(3.0, 4.0);Point c = b;2010/2011Introdução à Programação - DCTI - ISCTE-IUL13Operador == verifica se valores são iguais!aab7bc: Point: Pointa == b? Sim!7x = 3,0y = 4,0x = 3,0y = 4,0a == b? Não!c == b? Sim!Operador == verifica se referências são iguais! Ou seja, verifica se se referem à mesma instância!
  • 14.
    Inicializações automáticasAtributos declasses e itens de matrizes de tipos primitivos inicializados com valor por omissão:int – 0double – 0.0boolean – false… Atributos de classes e itens de matrizes de tipos de referência inicializados com null2010/2011Introdução à Programação - DCTI - ISCTE-IUL14
  • 15.
    Classes: operações emétodos de instânciaOperações realizam-se sobre uma instância da classeMétodos são implementação de operaçõesOperações podem serFunções – Calculam e devolvem um resultadoProcedimentos – Realizam uma acção2010/2011Introdução à Programação - DCTI - ISCTE-IUL15
  • 16.
    Classes: funções eprocedimentos de instânciaFunçõesConjunto de instruções, com interface bem definida, que efectua um dado cálculoDevolvem explicitamente um resultado ao exteriorNão devem efectuar qualquer alteração ao estado do objectoProcedimentosConjunto de instruções, com interface bem definida, que realiza uma determinada acção (normalmente alteram o estado da instância)Não devolvem explicitamente um resultado ao exterior 2010/2011Introdução à Programação - DCTI - ISCTE-IUL16
  • 17.
    Classes: natureza dasoperações de instânciaInspectores (funções) – Acedem às propriedades da instânciaModificadores (procedimentos) – Agem sobre a instância, modificando-aFunções não inspectoras – Acedem às propriedades de terceirosProcedimentos não modificadores – Agem sobre terceiros2010/2011Introdução à Programação - DCTI - ISCTE-IUL17
  • 18.
    Classes: funçõespublicclassNome {privatetipoatributo; …publictiponome(parâmetros) {instruções …returnexpressão; } …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL18os atributos não devem ser modificados pela funçãointerfaceimplementação
  • 19.
    Classes: procedimentospublicclassNome {privatetipoatributo; …publicvoidnome(parâmetros) {instruções …returnexpressão; } …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL19os atributos podem ser modificados pelo procedimentointerfaceimplementação
  • 20.
    Exemplo: calculadorapublicclassCalculator {privatedoublevalue;publicCalculator(){value = 0.0; }publicdoublegetValue() {returnvalue; }publicvoidsetValue(doublenewValue) {value = newValue; }publicvoidclear() {value = 0.0; } publicvoidadd(doubleterm) {value += term; } …}Calculatorc = newCalculator();2010/2011Introdução à Programação - DCTI - ISCTE-IUL20c.getValue();cc.setValue(5);c.clear();c.add(10);
  • 21.
    Classe vs. classepacoteClasseMolde para construção de instânciaspublic class Calculator { private int value;public Calculator() {…} public int value() {…} public void clear() {…} …}Classe pacoteConjunto de métodos de classe relacionados empacotados num módulopublicclassMath {privateMath() {…}publicstaticdoublesin(doubleangle) {…}publicstaticdoublesqrt(doublevalue) {…} …}2010/2011Introdução à Programação - DCTI - ISCTE-IUL21
  • 22.
    Classe StringRepresenta cadeiasde caracteresInstâncias imutáveis, i.e., estado observável não muda após construçãoValores literaisCaracteres entre aspasSão referências para instâncias2010/2011Introdução à Programação - DCTI - ISCTE-IUL22Instâncias do tipoString“IP…”“IP não é tramado”“não é tramado, se praticarem!”
  • 23.
    String: inicializaçãoUtilizar cadeiasde caracteres literais optimiza memória e aumenta eficiênciaEvitar utilizar construir novas instânciasExemplo a evitarStringname =newString("ISCTE");Stringname= "ISCTE";2010/2011Introdução à Programação - DCTI - ISCTE-IUL23valor literal (referência para instância de String pré-existente)"ISCTE": Stringname“ISCTE”
  • 24.
    String: comprimento ecaracteresComprimentointlength= name.length();Caractere em determinada posiçãocharlastCharacter = s.charAt(4);2010/2011Introdução à Programação - DCTI - ISCTE-IUL24: StringnamelengthlastCharacter“ISCTE”5‘E’'I''S''C''T''E'01234: String
  • 25.
    String: subcadeiasInicializaçãoStringiscteIul ="ISCTE-IUL";SubcadeiaStringiul = s.substring(6);Stringiscte = s.substring(0, 5);2010/2011Introdução à Programação - DCTI - ISCTE-IUL25iscteIuliuliscte'I''S''C''T''E''-''I''U''L''I''U''L''I''S''C''T''E'01234567801201234
  • 26.
    String: concatenaçãoConcatenaçãoStringnewName= iscte.concat("-IUL");Concatenaçãosimplificada (operador +)StringnewName = iscte + "-IUL";2010/2011Introdução à Programação - DCTI - ISCTE-IUL26isctenewName'I''S''C''T''E''I''S''C''T''E''-''I''U''L'01234012345678
  • 27.
    String: Igualdade vs.identidadeTipos primitivos (int, boolean, etc.)int a = 7;int b = a;Tipos de referência (matrizes, classes)Stringa = "A";Stringb = "A";Stringc =newString("A");String d = c;2010/2011Introdução à Programação - DCTI - ISCTE-IUL27Operador == verifica se valores são iguais!aab"A"cd7ba == b? Sim!7a == b? Sim!a== c? Não!c == d? Sim.a.equals(b)? Sim.a.equals(c)? Sim!c.equals(d)? Sim.“A”“A”Operador == verifica se referências são iguais! Ou seja, verifica se se referem à mesma instância!
  • 28.
    A reterClasses einstânciasInstanciaçãoMembrosPropriedades vs. atributosOperações vs. métodosConstrutoresFunções vs. procedimentosTipos de referência vs. tipos de valorTipos primitivos vs. restante tipos (em Java)Igualdade vs. identidadeCadeias de caracteres com a classe String2010/2011Introdução à Programação - DCTI - ISCTE-IUL28
  • 29.
    A ler...Capítulos 8e 9do livro:Y. Daniel Liang, Introduction to Java Programming, 8.ª edição, Prentice-Hall, 2010. ISBN: 978-0-13-213080-62010/2011Introdução à Programação - DCTI - ISCTE-IUL29
  • 30.
    SumárioClasses e instânciasCadeiasde caracteres2010/2011Introdução à Programação - DCTI - ISCTE-IUL30