• Nenhum resultado encontrado

UNIFEI Disciplina Professor

N/A
N/A
Protected

Academic year: 2021

Share "UNIFEI Disciplina Professor"

Copied!
5
0
0

Texto

(1)

UNIFEI

Universidade Federal de Itajubá

Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI

Disciplina CCO02 – Enganharia de Software II

Professor Enzo Seraphim

Nota de aula de Java Encapsulamento

1 Programação Orientada a Objetos em Java

A programação orientada a objetos POO é um paradigma de programação que usa objetos, contendo dados e código, como blocos que constroem a aplicação. Embora o paradigma POO não necessariamente proporcione a você um código fácil de escrever, o resultado do uso da POO tradicionalmente tem sido um código fácil de se manter. Ter dados e código do objeto em uma mesma implementação simplifica o processo de procurar e encontrar bugs, consertando-os com um efeito mínimo sobre os outros objetos, e melhorando uma parte do seu programa ao mesmo tempo. Tradicionalmente, uma linguagem de POO contém a implementação de no mínimo três conceitos da POO:

 Encapsulamento – Trata de combinar campos de dados relacionados e ocultar os detalhes de implementação. As vantagens do encapsulamento incluem modularidade e isolamento do código de outros códigos.

 Herança – A capacidade de criar novos objetos que mantêm as propriedades e comportamentos dos objetos ancestrais. Este conceito permite que você crie hierarquias de objetos que têm em um primeiro nível os objetos genéricos e nos próximos níveis os objetos que tem funcionalidades mais específicas. A vantagem da herança é divisão de código comum.

 Polimorfismo – Literalmente, polimorfismo significa "muitas formas". Chamar métodos de uma variável do objeto chamará o código apropriado para qualquer uma das instâncias que é na verdade uma variável.

1.1 Função Principal

A função principal indica a posição onde deve ser iniciada a execução do código. Em java toda função deve estar encapsulada dentro de uma classe e por isso , até mesmo a função principal.

Qualquer classe em java pode ter uma função principal, abaixo segue um exemplo: public class OlaMundo{

public static void main(String args[]){ System.out.println("Ola mundo"); }

}

1.2 Pacote

As classes agrupam definições de métodos, atributos, inicializadores para definição de tipos. Pacotes agrupam definições de classes relacionadas. Além disso, pacotes estruturam sistemas de grande porte, facilitando a localização das classes.

O nome de um grupo de classes pode ser usado para facilitar a localização de uma de suas classes; isto é, para localizar uma classe podemos apenas saber o agrupamento ao qual ela pertence e então localizar a mesma dentro deste agrupamento, o que é muito mais fácil de ser feito já que sempre haverá muito menos agrupamentos do que classes. Por exemplo, a biblioteca básica de Java inclui vários pacotes, cada um contendo classes fortemente relacionadas: java.io (contém classes para realizar entrada/saída de dados), java.awt (contém classes para definir interfaces gráficas), java.net (contém classes de suporte a utilização de Internet/WWW), etc.

Em java existe uma recomendação para que cada classe seja declarada em um arquivo do sistema operacional. Quando se declara um pacote deve-se obrigatóriamente criar um diretório com o nome do pacote que vai armazenar as várias classes.

Para definir que uma classe está dentro de um pacote, utiliza-se a seguinte declaração:

(2)

Existe uma recomendação para que os nomes dos pacotes sejam declarados em minúsculo. Além disso, um pacote pode conte outros pacotes e formar uma hierarquia de pacotes. Essa hierarquia também deve ser criar na estrutura de diretórios. Por exemplo:

package nomepacote.subpacote;

Essa declaração indica que exite um subdiretório subpacote dentro de um diretório nomepacote.

Para utilizar as classes definidas dentro de um pacote deve-se usar a palavra reservada import antes da definição da classe. Por exemplo:

import nomepacote.subpacote.ClasseA;

Essa declaração indica que será usado a ClasseA dentro desse arquivo de definição de classe.

É importante notar que importação de pacotes não é transitiva, ou seja, toda arquivo que precisar da ClasseA deve-se usar a declaração anterior.

O exemplo abaixo mostra como importar todos as classes de um pacote:

import nomepacote.subpacote.*;

1.3 Classes

É o conjunto de características que modelam um objeto. A classe não ocupa espaço em memória e não tem dados específicos do programa. Ela possui apenas as regras que irão definir o comportamento de um objeto.

package br.edu.unifei.oo; public class Circulo{ }

Esssa classe deve ser armazenada dentro do diretório br/edu/unifei/oo com um arquivo de nome Circulo.java

1.4 Objetos

São apontadores para as características do objeto em memória que devem ser alocadas previamente. Os objetos são entidades que podem conter dados e códigos que estão definidas em uma classe. A declaração de objetos é igual à declaração de uma variável simples, tendo no lugar do tipo a classe do objeto.

Circulo c;

1.5 Instância

A instância é uma região de memória que guarda as características do objeto. Todo objeto antes de ser usado deve ser alocado na memória. Para criar uma instância de um objeto em deve-se chamar um de seus construtores o construtor tem o mesmo nome da classe. O ato de chamar um construtor para criar uma instância de um objeto é freqüentemente chamado de instanciação. A seguir um exemplos de instanciação de objeto, um usando constrututor create.

...

Circulo c = new Circulo();

1.6 Construtores

Um construtor é responsável por criar uma instância de seu objeto e alocar qualquer memória ou inicializar qualquer campo necessário de forma que o objeto esteja em estado de uso depois da saída do construtor. Assim, o construtor é uma oportunidade de inicializar de forma organizada as características dos objetos. Os métodos construtores são definidos definindo um método com o mesmo nome da classe. Toda classe pode ter um ou mais construtores, mas apenas um deve ser executado para cria o objeto. Dependendo do tipo do objeto, o construtor pode ter diferentes números de parâmetros. Para que uma classe seja instanciada em java deve ser declarado um construtor.

(3)

O construtor para o objeto possibilita: inicializar atributos com um valor padrão; inicializar atributos com valores passados pelo usuário (construtor de atribuição); instanciar objetos pertencentes à classe.

package br.edu.unifei.oo; public class Circulo{

public float x, y, raio;

public Circulo(){ x=0; y=0; raio=0;}

public Circulo(int valX, int valY, int valRaio){ x = valX; y = valY; raio = valRaio;

}

public Circulo( Circulo c){ x=c.x; y=c.y; raio=c.raio;}

public static void main(String args[]){ Circulo c1 = new Circulo();

Circulo c2 = new Circulo(1, 2, 3);

System.out.println("x="+c1.x+" y="+c1.y+" raio="+c1.raio); System.out.println("x="+c2.x+" y="+c2.y+" raio="+c2.raio); }

}

1.7 Destrutor

Java não tem o conceito de um destrutor, ou seja, um método que é chamado automaticamente quando um objeto é destruído. A razão é que, em Java, a idéia é simplesmente esquecer dos objetos, no lugar de destruí-los, permitindo que o coletor de lixo recupere a memória conforme necessário.

1.8 Visibilidade

Conjunto de técnicas usadas para limitar o acesso aos atributos e métodos internos de um objeto. Os níveis de visibilidade dos atributos e métodos de uma classe são:

 Privado – área privada de uma classe contém declarações que não estão acessíveis, nem fora da classe (exceto quanto estão na mesma unit), nem para seus herdeiros. Útil para guardar informações que precisam ter o conteúdo preservado ou protegido. Uma área privada é iniciada com a palavra reservada private.

 Público- indica declarações visíveis em qualquer local, seja dentro ou fora da classe. Uma área pública é iniciada com a palavra reservada public.

 Protegido - área cuja declaração é visível apenas pela própria classe e seus herdeiros. Não é visível fora da classe. Uma área protegida é iniciada com a palavra reservada protected.

1.9 Atributos

São as informações que podem ser gravadas em um objeto, ou seja, são as variáveis declaradas na classe. Para declarar um atributo em uma classe basta definir: nível de visibilidade; o tipo do atributo e o identificador.

Normalmente os atributos são privados e o acesso ou a mudança de seus valores é feito com o uso de um método de leitura e um método de escrita.

package br.edu.unifei.oo; public class Circulo{

private float x, y, raio;

public Circulo(){ x=0; y=0; raio=0;}

public Circulo(int valX, int valY, int valRaio){ x = valX; y = valY; raio = valRaio;}

public float getX() { return x; }

public void setX(float valX) { x=valX; } public float getY() { return y; }

public void setY(float valY) { y=valY; } public float getRaio() { return raio; }

public void setRaio(float valRaio) { x=valRaio; } public static void main(String args[]){

(4)

Circulo c1 = new Circulo();

Circulo c2 = new Circulo(1, 2, 3); System.out.println("x="+c1.getX()+" y="+ c1.getY()+" raio="+c1.getRaio()); System.out.println("x="+c2.getX()+" y="+ c2.getY()+" raio="+c2.getRaio()); } }

1.10 Métodos de classe

Métodos são funções que pertencem a alguma classe, passando a fazer parte de qualquer objeto dessa classe. Na implementação de um método precisamos indicar qual a classe à qual ele pertence. Para chamar um método em algum lugar não pertencente à sua classe, deve ser indicado o objeto que deve executar o método. Os métodos usam os mesmos níveis de encapsulamento dos atributos.

Métodos de classe são aqueles que são declarados sem a palavra reservada static ou abstract. Quando é chamado um método estático é executado o método do objeto que está em uso.

package br.edu.unifei.oo; public class Circulo{

privatefloat x, y, raio;

public Circulo(){ x=0; y=0; raio=0;}

public Circulo(int valX, int valY, int valRaio){ x = valX; y = valY; raio = valRaio;}

public float getX() { return x; }

public void setX(float valX) { x=valX; } public float getY() { return y; }

public void setY(float valY) { y=valY; } public float getRaio() { return raio; }

public void setRaio(float valRaio) { x=valRaio; } public void deslocaX(float valX) { x+=valX; } public void deslocaY(float valY) { y+=valY; } public static void main(String args[]){

Circulo c1 = new Circulo(1, 2, 3); System.out.println("x="+c1.getX()+" y="+ c1.getY()+" raio="+c1.getRaio()); c1.deslocaX(1); c1.deslocaY(1); System.out.println("x="+c1.getX()+" y="+ c1.getY()+" raio="+c1.getRaio()); } }

1.10.1Parâmetros de valor default

Java não possui valor default em função, que é a habilidade de fornecer um valor default para uma função e não ter que passar aquele parâmetro quando chamar a rotina. No entanto usamos sobrecarga de métodos para fazer isso.

public void incRaio(int valInc) { raio+=valInc; } public void incRaio() { incRaio(1); }

1.11 Sobrecarga de Métodos

Um método pode ser declarado mais de uma vez com o mesmo nome na classe, mas com parâmetros diferentes. Isso é chamado de sobrecarga “overloading” de método. Uma forma de sobrecarga mostrado anteriormente, é a sobrecarga sobre de construtor, pois uma classe pode ter mais de um construtor com diferentes parâmetros. Além de sobrecarregar o construtor de uma classe pode-se sobrecarregar método da classe.

package br.edu.unifei.oo; public class Circulo{

private float x, y, raio;

public Circulo(){ x=0; y=0; raio=0;}

public Circulo(int valX, int valY, int valRaio){ x = valX; y = valY; raio = valRaio;}

(5)

public float getX() { return x; }

public void setX(float valX) { x=valX; } public float getY() { return y; }

public void setY(float valY) { y=valY; } public float getRaio() { return raio; }

public void setRaio(float valRaio) { x=valRaio; } public void desloca(float valX) { x+=valX; }

public void desloca(float valX, float valY) { x+=valX; y+=valY; } public static void main(String args[]){

Circulo c1 = new Circulo(1, 2, 3); System.out.println("x="+c1.getX()+" y="+ c1.getY()+" raio="+c1.getRaio()); c1.desloca(1); System.out.println("x="+c1.getX()+" y="+ c1.getY()+" raio="+c1.getRaio()); c1.desloca(1,2); System.out.println("x="+c1.getX()+" y="+ c1.getY()+" raio="+c1.getRaio()); } }

1.12 Métodos de estáticos

Antes de utilizar um método, deve-se primeiro declarar uma variável e instancia a variável com o construtor da classe. Ou seja, deve-se instanciar uma classe para a utilização do método. No entanto existe um tipo especial de método, chamado método de classe, que pode ser utilizado sem que exista uma instancia dessa classe. Para declarar um método de classe, deve-se acrescentar a palavra static após a visibilidade da função membro da classe. Tenha cuidado, apesar de tudo, de não fazer um método da classe depender da informação de alguma instância, ou você obterá um erro de compilação.

java.lang.Math;

package br.edu.unifei.oo; public class Triangulo{

private float ladoA, ladoB, ladoC; public Triangulo(){ ladoA=0; ladoB=0; } public float getLadoA() { return ladoA; } public void setLadoA(float v) { ladoA=v; } public float getLadoB() { return ladoB; } public void setLadoB(float v) { ladoB=v; } public float getLadoC() { return ladoC; } public void setLadoC(float v) { ladoC=v; }

public static double hipotenusa (double catA, double catB){ return Math.sqtr(catA*catA + catB*catB);

}

public static double catetoPitagoras ( double hip, double cat){ return Math.sqtr(hip*hip - cat*cat);

}

public static void main(String args[]){

System.out.println(" é hipotenusa "+Triangulo.hipotenusa(4,3)); } }

Referências

Documentos relacionados

Deste modo, verificou-se que, tanto para o Grupo A (p=0,49), como para o Grupo B (p=0,39) não existem diferenças estatisticamente significativas nas notas médias

No entanto, para aperfeiçoar uma equipe de trabalho comprometida com a qualidade e produtividade é necessário motivação, e, satisfação, através de incentivos e política de

O termo extrusão do núcleo pulposo aguda e não compressiva (Enpanc) é usado aqui, pois descreve as principais características da doença e ajuda a

esta espécie foi encontrada em borda de mata ciliar, savana graminosa, savana parque e área de transição mata ciliar e savana.. Observações: Esta espécie ocorre

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

A partir das análises realizadas no que tange às articulações entre processo formativo que enfatizou a ressignificação e aplicação, inferimos que a aplicação da SEA replanejada no

Apesar dos esforços para reduzir os níveis de emissão de poluentes ao longo das últimas décadas na região da cidade de Cubatão, as concentrações dos poluentes

A assistência da equipe de enfermagem para a pessoa portadora de Diabetes Mellitus deve ser desenvolvida para um processo de educação em saúde que contribua para que a