Programação Orientada a objeto
Programação orientada a objetos representa o mundo real. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software.
Classes
Em orientação a objetos, uma classe é uma estrutura que abstrai um conjunto de objetos com características similares. Uma classe define o comportamento de seus objetos através de métodos e os estados possíveis destes objetos através de atributos. Em outros termos, uma classe descreve os serviços providos por seus objetos e quais informações eles podem armazenar.
Representando o mundo real
Representando o mundo real temos um objeto bebê, nosso bebê possui os seguintes atributos:
- Nome
- Peso
- Sexo
- Decibéis (choro)
- Numero de cacas até agora
Nosso objeto bebê :
String nome boolean genero double peso double decibeis int numCaca
Porque Usar Classes?
No mundo real, muitas vezes você vai encontrar muitos objetos individuais todos da mesma espécie. Pode haver milhares de outros bebês na existência, todos parecidos. Cada bebê foi construído a partir do mesmo conjunto de projetos(DNA) e, portanto, contém os mesmos componentes. Em termos de orientação a objetos, dizemos que o seu bebê é uma instância da classe de objetos conhecidos como bebê. Uma classe é o modelo a partir do qual objetos individuais são criados. Criando a classe bebê teremos um objeto bebê com seus atributos definidos:
A partir do objeto bebê podemos instanciar vários outros com as mesmas características:
Para cuidar dos bebês precisamos de enfermeiras e de um berçário, podemos também criar a classe enfermeiras e a classe berçário:
Na classe berçário podemos ter inúmeros bebês e varias enfermeiras para cuidar de cada bebê:
Podemos ir mais além e manipular varias classes a hospital, emergência, berçário, enfermeiras e bebê:
Criando Classes
Uma classe possui basicamente 3 partes distintas:
-
A Definição da classe .
-
Os membros da classe.
-
Construtor da classe.
Definição da classe: Nomes de classes são capitalizados , uma classe é igual a um arquivo, ter um método principal (main) significa que a classe pode ser executada.
public class Bebe { }
Os membros da classe: Os membros da classe podem ser campos, propriedades, métodos e etc.
public class Bebe { String nome; double peso= 5.0; boolean genero; int numCaca = 0; }
Construtor: Nome do construtor é igual ao nome da classe, não possui retorno, nunca retorna nada, normalmente inicializa campos, todas as classes precisam de pelo menos um construtor, se você não escrever um, o padrão é Nomedaclasse() { }.
// Definição da classe public class Bebe { // membros da classe String nome; boolean eMasculino; // Construtor da Classe Baby (String meunome, boolean bebeMasculino) { nome = meunome; eMasculino = bebeMasculino; } }
Instancias de Classes
Para criar uma instancia de uma classe use o comando new:
// Cria uma instancia Bebe Daniel = new Bebe(); //para usar a instacia Daniel.nome = "Daniel";
Exemplo: Neste cenário vamos criar duas classes bem simples e instanciar as classes na classe main (principal), utilizaremos apenas os princípios básicos de classes e veremos que ela funciona tanto em Java como em C#. Basicamente temos um hospital no qual seu berçário recebeu 3 novos bebês, assim que os bebês precisam de cuidados duas enfermeiras estão prontas para atende-los, seja trocando sua fralda ou prestando cuidados de enfermaria, deixando os bebê limpos e saudáveis novamente.
JAVA
Classe #1: Hospital Main Class.
public class Hospital { // Esta classe funciona em Java e em C# // Apenas troque as keyword: // System.out.println por // Console.Writeln public static void main(String[] args) { // Classe Hospital // Rescem nascidos Bebe Amanda = new Bebe(); Bebe Julia = new Bebe(); Bebe Rodrigo = new Bebe(); // Bebê Amanda Amanda.nome = "Amanda"; Amanda.tamanho = 30.4; Amanda.sexo = "feminino"; // Bebê Julia Julia.nome = "Julia"; Julia.tamanho = 28.7; Julia.sexo = "feminino"; // Bebê Rodrigo Rodrigo.nome = "Rodrigo"; Rodrigo.tamanho = 27.9; Rodrigo.sexo = "masculino"; // Bebês System.out.println("Bebês no berçario do hospital: "); System.out.println(""); System.out.println(Amanda.nome + " sexo: " + Amanda.sexo + " tamanho: " + Amanda.tamanho); System.out.println(Julia.nome + " sexo: " + Julia.sexo + " tamanho: " + Julia.tamanho); System.out.println(Rodrigo.nome + " sexo: " + Rodrigo.sexo + " tamanho: " + Rodrigo.tamanho); // Bêbes que precisam de cuidados Amanda.setSaudavel(false); Rodrigo.setFezCoco(true); System.out.println(""); System.out.println("Estes bebês precisam de uma enfermeira"); if (Amanda.getSaudavel() == false) { System.out.println(Amanda.nome + " está doente e precisa de cuidados"); } if (Rodrigo.getFezCoco() == true) { System.out.println(Rodrigo.nome + " precisa trocar a fralda"); } // Cria Enfermeiras Enfermeira Regina = new Enfermeira(); Enfermeira Mara = new Enfermeira(); Regina.nome = "Regina"; Mara.nome = "Mara"; // Enfermeiras trabalhando Amanda.setSaudavel(Regina.getEnfermaria()); Rodrigo.setFezCoco(Mara.getTrocaFralda()); // Bebês após cuidados System.out.println(""); System.out.println(Regina.nome + " e " + Mara.nome + " cuidaram dos bebês"); if (Amanda.getSaudavel() == true) { System.out.println(Amanda.nome + " está saudavel novamente"); } if (Rodrigo.getFezCoco() == false) { System.out.println(Rodrigo.nome + " esta com uma nova fralda"); } } }
Classe #2 – Classe Bebê.
public class Bebe { // Cria campos public String nome = null; public Double tamanho = 0.0; public String sexo = null; private Boolean saudavel = true; private Boolean fezCoco = false; // Cria métodos Getter e Setter para a classe public Boolean getSaudavel() { return saudavel; } public void setSaudavel(Boolean saudavel) { this.saudavel = saudavel; } public Boolean getFezCoco() { return fezCoco; } public void setFezCoco(Boolean fezCoco) { this.fezCoco = fezCoco; } // Construtor da classe public Bebe() { } }
Classe #3 – Classe Enfermeira.
public class Enfermeira { // Cria campos da classe public String nome = null; private Boolean enfermaria = true; private Boolean trocaFralda = false; // Construtor da classe public Enfermeira() { } // Métodos Getter e Setter public Boolean getEnfermaria() { enfermaria = true; return enfermaria; } public Boolean getTrocaFralda() { trocaFralda = false; return trocaFralda; } }
C#
Para rodar estas classes em C# apenas crie um novo projeto e substitua a classe default pela classe hospital, no solution explorer clique com o botão direito no projeto, add, new item, class, renomeie a classe para Bebe.cs e colque a classe Bebe acima, faça o mesmo com a classe Enfermeira, as classes foram escritas para funcionar nas duas línguas e só é necessário substituir uma keyword:
// Em C# na classe Hospital a Void que inicializa o programa sua única diferença // é a keyword String para Java e string para C# public static void main(String[] args) // JAVA static void Main(string[] args) // string minusculo C# // Você pode substituir tudo de uma única vez no menu: // Edit - Find and Replace - Quick Replace - botão para substituir todos // Substitua na classe Hospital todos os comandos Java: System.out.println // Java keywords // por : Console.WriteLine
Obs: A principal diferença destas 3 classe e o funcionamento do programa acima é que Java não necessita que o construtor das classes Bebe e Enfermeira sejam públicos, já em C# não seria possível instanciar as classe deste modo sem que o construtor tenha sido declarado publico. Experimente tirar a keyword public do construtor e compilar o programa.