Classes e objetos Java
1. Visão geral
Neste tutorial rápido, veremos dois blocos de construção básicos da linguagem de programação Java - classes e objetos. Eles são conceitos básicos de Programação Orientada a Objetos (OOP), que usamos para modelar entidades da vida real.
Em OOP,classes are blueprints or templates for objects. We use them to describe types of entities.
Por outro lado,objects are living entities, created from classes. They contain certain states within their fields and present certain behaviors with their methods.
2. Aulas
Simplificando, uma classe representa uma definição ou um tipo de objeto. Em Java, as classes podem conter campos, construtores e métodos.
Vejamos um exemplo usando uma classe Java simples que representa umCar:
class Car {
// fields
String type;
String model;
String color;
int speed;
// constructor
Car(String type, String model, String color) {
this.type = type;
this.model = model;
this.color = color;
}
// methods
int increaseSpeed(int increment) {
this.speed = this.speed + increment;
return this.speed;
}
// ...
}
Esta classe Java representa um carro em geral. Podemos criar qualquer tipo de carro dessa classe. Usamos campos para armazenar o estado e um construtor para criar objetos a partir desta classe.
Toda classe Java possui um construtor vazio por padrão. Nós o usaremos se não fornecermos uma implementação específica como fizemos acima. Veja como o construtor padrão ficaria para nossa classeCar:
Car(){}
Este construtor simplesmente inicializa todos os campos do objeto com seus valores padrão. Strings são inicializados emnulle inteiros em zero.
Agora, nossa classe tem um construtor específico porque queremos que nossos objetos tenham seus campos definidos quando os criamos:
Car(String type, String model) {
// ...
}
Em resumo, escrevemos uma classe que define um carro. Suas propriedades são descritas por campos, que contêm o estado dos objetos da classe, e seu comportamento é descrito usando métodos.
3. Objetos
Enquanto as classes são traduzidas durante o tempo de compilação,objects are created from classes at runtime.
Os objetos de uma classe são chamados de instâncias, e os criamos e inicializamos com construtores:
Car focus = new Car("Ford", "Focus", "red");
Car auris = new Car("Toyota", "Auris", "blue");
Car golf = new Car("Volkswagen", "Golf", "green");
Agora, criamos diferentes objetosCar, todos de uma única classe. This is the point of it all, to define the blueprint in one place, and then, to reuse it many times in many places.
Até agora, temos três objetosCar, e todos eles estão estacionados, pois sua velocidade é zero. Podemos mudar isso invocando nosso métodoincreaseSpeed:
focus.increaseSpeed(10);
auris.increaseSpeed(20);
golf.increaseSpeed(30);
Agora, mudamos o estado de nossos carros - eles estão se movendo em velocidades diferentes.
Além disso, podemos e devemos definir o controle de acesso à nossa classe, seus construtores, campos e métodos. Podemos fazer isso usando modificadores de acesso, como veremos na próxima seção.
4. Modificadores de acesso
Nos exemplos anteriores, omitimos modificadores de acesso para simplificar o código. Ao fazer isso, usamos um modificador privado de pacote padrão. Esse modificador permite acesso à classe de qualquer outra classe no mesmo pacote.
Normalmente, usaríamos um modificadorpublic para construtores para permitir o acesso de todos os outros objetos:
public Car(String type, String model, String color) {
// ...
}
Cada campo e método em nossa classe também deve ter definido o controle de acesso por um modificador específico. Classes usually have public modifiers, but we tend to keep our fields private.
Os campos mantêm o estado do nosso objeto, portanto, queremos controlar o acesso a esse estado. Podemos manter alguns delesprivate e outrospublic. Conseguimos isso com métodos específicos chamados getters e setters.
Vamos dar uma olhada em nossa classe com controle de acesso totalmente especificado:
public class Car {
private String type;
// ...
public Car(String type, String model, String color) {
// ...
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSpeed() {
return speed;
}
// ...
}
Our class is marked public, which means we can use it in any package. Além disso, o construtor épublic, o que significa que podemos criar um objeto desta classe dentro de qualquer outro objeto.
Our fields are marked private, which means they’re not accessible from our object directly, mas fornecemos acesso a eles por meio de getters e setters.
Os campostypeemodel não possuem getters e setters, pois eles contêm dados internos de nossos objetos. Nós podemos defini-los somente através do construtor durante a inicialização.
Além disso,color pode ser acessado e alterado, enquantospeed pode apenas ser acessado, mas não alterado. Aplicamos ajustes de velocidade por meio dos métodospublic especializadosincreaseSpeed()edecreaseSpeed().
Em outras palavras,we use access control to encapsulate the state of the object.
5. Conclusão
Neste artigo, analisamos dois elementos básicos da linguagem Java, classes e objetos, e mostramos como e por que eles são usados. Também introduzimos o básico do controle de acesso e demonstramos seu uso.
Para aprender outros conceitos da linguagem Java, sugerimos ler sobreinheritance,the super keyword eabstract classes como uma próxima etapa.
O código-fonte completo para o exemplo éavailable over on GitHub.