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;
}