Tag: Classes
Programação avançada – capitulo 3
Objetos
A palavra new permite criar novos objetos
Os delimitadores dos { } permitem define o scope dos objetos
Em java existe o Garbage collector, que detecta todos os objetos que foram criados por new e que já não são referenciados em memória, libertanto desta forma o espaço em memória correspondente (esta dinâmica não existe noutras linguagens como em C, ou o destrutor em C++)
Um classe é constituída por:
membros variáveis (do tipo primitivos ou referências para objetos) Para se usar os membros de um determinado objeto faz-se uso do . (ponto final)
por métodos (podem existir métodos com o mesmo nome na mesma classe, são os métodos overloaded )
por um ou mais construtores (é a forma de garantir a inicialização de todos os objetos de uma classe, e o construtor não pode ser chamado por um seu método)
package e08; class Texto{ String palavras; int numero_paginas; Texto(){ palavras = "vazio"; numero_paginas = 0; } Texto(String p, int n_p){ palavras = p; numero_paginas = n_p; } boolean valida(int n_p){ if(n_p <=0){ return false; } return true; } } public class e08 { public static void main(String args[]) { System.out.println("\n O uso de classes"); Texto t1 = new Texto(); System.out.println("\n construtor por defeito: " + t1.numero_paginas + " - " + t1.palavras); Texto t2 = new Texto("pedro", 100); System.out.println("\n construtor overloaded: " + t2.numero_paginas + " - " + t2.palavras); } }
A palavra chave this:
Permite aceder a uma variável ou a um método do próprio objeto
o this também pode ser usado dentro de um construtor, o this faz uma chamada explicita ao construtor (com ou sem argumentos)
um construtor pode então desta forma ser chamado a partir de outro construtor
package e09; class Texto{ String palavras; int numero_paginas; Texto(){ this("vazio", 100); } Texto(String p, int n_p){ palavras = p; numero_paginas = n_p; } boolean valida(int n_p){ if(n_p <=0){ return false; } return true; } } public class e09 { public static void main(String args[]) { System.out.println("\n O uso da referência especial this"); Texto t1 = new Texto(); System.out.println("\n construtor por defeito: " + t1.numero_paginas + " - " + t1.palavras + " - " + t1.valida(t1.numero_paginas)); } }
São membros static:
Aquelas variáveis ou os membros que não estão ligados a qualquer objeto em particular
Só existe uma versão de um membro variável estático, partilhada por todos os objetos
Antes de se criar um objeto, podemos executar o método static ou aceder a qualquer variável static
Os métodos static, não têm a referência a this
Não se pode aceder directamente a variáveis ou métodos não estáticos (pois eles estão sempre ligados a um objeto em particular, e assim só se pode aceder a membros não estáticos se for invocado a partir de um objeto)
package e10; class Texto { String palavras; static int numero_paginas = -1; Texto() { this("vazio", 100); } Texto(String p, int n_p) { palavras = p; numero_paginas = n_p; } static boolean valida(int n_p) { if (n_p <= 0) { return false; } return true; } } public class e10 { public static void main(String args[]) { System.out.println("\n membros static"); System.out.println("\n aceder ao métodos antes do objeto: " + Texto.valida(100)); Texto t1 = new Texto(); System.out.println("\n aceder ao métodos depois do objeto: " + t1.valida(Texto.numero_paginas)); } }
A inicialização
Os membros variáveis das classes se forem usados sem estarem inicializados vão dar erro
É preferível inicializar essas variáveis ou então fazê-lo no construtor, com valores pode defeito
Se forem membros estáticos, eles são inicializados apenas uma vez, quando a classe for usada pela primeira vez
Nos objetos:
são inicializados os membros variáveis e depois o construtor
package e11; class Texto { String palavras; int numero_paginas = -1; Texto() { palavras = "vazio original"; System.out.println("\n construtor do texto: " + palavras); } Texto(String p, int n_p) { palavras = p; numero_paginas = n_p; System.out.println("\n segundo construtor do texto: " + palavras); } static boolean valida(int n_p) { if (n_p <= 0) { return false; } return true; } } class Livro { Texto t1 = new Texto("no livro", 100); Livro() { System.out.println("\n construtor do Livro: " + t1.palavras); } void mostra(){ System.out.println("\n mostra do Livro"); } static Texto t2 = new Texto("static no livro", 100); //primeiro a ser executado } public class e11 { public static void main(String args[]) { System.out.println("\n inicialização:"); Livro l1 = new Livro(); System.out.println("\n no main:" + l1.t1.palavras); l1.mostra(); } }
estudar11 – classes e a herança híbrida e múltipla
#include <cstdlib> #include <iostream> using namespace std; class Avo{ public: void mostraMsg(){ cout << "eu sou milionario\n"; }; }; class Mae{ public: void verifica(){ cout << "eu sou inteligente\n"; }; }; class Pai : public Avo{ public: }; class Filho : public Pai, public Mae{ public: }; int main(int argc, char** argv) { Filho f; f.verifica(); f.mostraMsg(); return 0; }
estudar09 – classes e a herança ()
#include #include using namespace std; class pai{ public: void dinheiro(){ cout << "eu sou um milionario"; } }; class filho : public pai{ //a classe filho herdou a função do pai através do principio da herança; public: }; int main(int argc, char** argv) { filho s; s.dinheiro(); return 0; }
estudar08 – classes e construtores
#include <cstdlib> #include <iostream> using namespace std; class Estudante{ int notas; public: Estudante(int p=50){ //construtor: evitar que a classe tenha lixo qd começa //que a classe comece com valores vladios qd começa //consrutor parameterizado (int p) //ou podemos iniciar o construtor logo com o valor (int p=50) notas=p; } void getDados(){ cout << notas; } void setDados(){ cout << "\n Qual a nota "; cin >> notas; } }; int main(int argc, char** argv) { Estudante s; s.getDados(); return 0; }
estudar07 – classes II
#include <cstdlib> #include <iostream> using namespace std; class estudante{ int id; char name[20]; int s1; int s2; int s3; public: void getDados(){ cout << "\nqual o id? "; cin >> id; cout << "\nqual o nome? "; cin >> name; cout << "\nQual a nota da UC1 ?"; cin >> s1; cout << "\nQual a nota da UC2 ?"; cin >> s2; cout << "\nQual a nota da UC1 4"; cin >> s3; } void mostraDados(){ cout << "\n" << id << "\t" << name << "\t" << s1 << "\t" << s2 << "\t" << s3; } }; int main(int argc, char** argv) { estudante s[10]; //array de objectos int n; cout << "\nQuantos estudantes? "; cin >> n; for(int i=0; i< n ; i++){ s[i].getDados(); } for(int i=0; i< n ; i++){ s[i].mostraDados(); } return 0; }
estudar06 – classes
#include <cstdlib> #include <iostream> using namespace std; //classes: classificação de alguma coisa class estudante{ //os atributos e propriedades, as variaveis int id; int notas; //membros da classe estudante, as funcoes dentro da classe public: void getDados(){ cout << "\n qual o seu id?"; cin >> id; cout <<"\n qual a sua nota?"; cin >> notas; } void mostraDados(){ cout << "\n" << id << "\t" << notas << "\n"; } }; int main(int argc, char** argv) { estudante novo; //novo: instancia da classe estudante novo.getDados(); novo.mostraDados(); return 0; }