Orientação a objetos – Parte I

Introdução da linguagem Java, Classes, Interfaces, Objetos(Herança, Encapsulamento e Polimorfismo)

 

Neste artigo estamos apresentando um pouco sobre a história da linguagem Java, o conceito sobre a orientação a objetos, explicando como reconhecer um algoritmo orientado a objetos.

 

Introdução

Atualmente, a linguagem que tem feito muito sucesso é a linguagem Java. Sendo assim uma linguagem importante tanto no meio acadêmico como no meio comercial.

 

A linguagem nasceu em meados de 1991 com o nome de Oak. Em 1995, foi decidido mudar o nome da linguagem Oak para Java. Esta linguagem foi criada para fornecer a eficiência da linguagem C++ e ainda a vantagem de uma linguagem que oferecesse segurança na utilização de tipos como a Smalltalk.

 

Um dos grandes diferenciais da programação orientada a objetos em relação a outros paradigmas de programação que também permitem a definição de estruturas e operações sobre essas estruturas estão no conceito de herança, mecanismo através do qual definições existentes podem ser facilmente estendidas.

 

Objetos são instâncias de classes, que determinam qual informação um objeto contém e como ele pode manipulá-la.

 

Java

Os principais objetivos do desenvolvimento dessa nova linguagem foram:

  1. a criação de uma linguagem orientada a objetos;
  2. o fornecimento de um ambiente – eliminar o ciclo de compilação / vinculação / carga / teste);
  3. através de uma máquina virtual (Java Virtual Machine – JVM) tornar os programas escritos com esta linguagem portáteis para outras plataformas;
  4. eliminar a aritmética de ponteiros que é a grande responsável por problemas de memória nos programas escritos em C++;
  5. eliminar a necessidade de alocação/desalocação de memória através da implantação de um coletor de lixo;
  6. fornecer uma maneira para que os programas possam executar mais de um thread de atividade por vez;
  7. fornecer uma maneira de carregar classes dinamicamente durante o tempo de execução.

Tornou-se linguagem nativa de alguns ambientes integrados de desenvolvimento (IDE), como: JBuilder (Borland Corporation); JDeveloper (Oracle Corporations); VisualAge for Java (IBM), agora conhecido como Studio; Visual Café (Symantec Corp.), entre outros. Para esta linguagem também existem vários IDEs gratuitos disponíveis na Internet para download, os mais conhecidos e utilizados são: Eclipse, NetBeans, JEdit, BlueJ, etc.

 

Abaixo segue um exemplo de uma classe escrita com a linguagem Java e a criação de um objeto desta classe.

 

public class Produto{ //classe Produto pública

      private int codigo; //atributo privado da classe produto

      private String descricao; //atributo privado da classe produto

      private float preco; //atributo privado da classe produto 

 

public float getPreco() {

      return preco;

}

}

 

Classes         

A definição de classes e seus inter-relacionamentos é o principal resultado da etapa de projeto de software. Em geral, esse resultado é expresso em termos de alguma linguagem de modelagem, tal como UML.

 

Uma classe é um gabarito para a definição de objetos. Através da definição de uma classe, descreve-se que propriedades — ou atributos — o objeto terá.

 

Além da especificação de atributos, a definição de uma classe descreve também qual o comportamento de objetos da classe, ou seja, que funcionalidades podem ser aplicadas a objetos da classe.

 

Essas funcionalidades são descritas através de métodos. Um método nada mais é que o equivalente a um procedimento ou função, com a restrição que ele manipula apenas suas variáveis locais e os atributos que foram definidos para a classe.

 

Uma vez que estejam definidas quais serão as classes que irão compor uma aplicação, assim como qual deve ser sua estrutura interna e comportamento, é possível criar essas classes em Java.

 

Na Unified Modeling Language (UML), a representação para uma classe no diagrama de classes é tipicamente expressa na forma gráfica, como mostrado na Figura 1.1.

 

Como se observa nessa figura, a especificação de uma classe é composta por três regiões: o nome da classe, o conjunto de atributos da classe e o conjunto de métodos da classe.

 

rcpoop1iljfig01.jpg 

 

Ou seja, uma classe é a representação de um conjunto de objetos que compartilham a mesma estrutura de atributos (“local” onde os objetos irão armazenar seu valores), operações (estas definem os comportamentos dos objetos, ou seja, as ações que os mesmos poderão realizar) e relacionamentos (a ligação que um objeto pode ter com outros objetos, ou ainda as relações que uma classe pode ter com a outra), dentro de um mesmo contexto (semântica).

 

Uma classe necessita de propriedades e métodos.

 

Identificando uma classe

Classes normalmente são substantivos, desta forma devemos identificar nos documentos que temos em mãos e através de entrevistas todos os substantivos e eles irão se tornar classes candidatas, já os verbos serão operações candidatas.

 

Dizemos aqui que são candidatos, pois depois teremos que analisar os mesmos e estudar para ver se todos realmente irão tornar classes.

 

Uma classe ideal deve esta claramente associada a uma abstração relevante para o sistema;

 

Ter o nome da classe como um substantivo, que caracteriza adequadamente a abstração;

Representar um conjunto possível de objetos de tempo de execução;

 

Possuir diversas operações disponíveis para ler as propriedades de uma instância;

 

Possuir diversas operações disponíveis para mudar o estado de uma instância;

 

Atributos descrevem as propriedades de uma classe, o que a classe em questão possui. Imaginamos uma classe Pessoa onde podemos levantar os seguintes atributos:

-nome, apelido, idade, peso, altura;

 

Os métodos (operações) definem as funcionalidades da classe, ou seja, o que será possível fazer com objetos dessa classe. Cada método é especificado por uma assinatura, composta por um identificador para o método (o nome do método), o tipo para o valor de retorno e sua lista de argumentos, sendo cada argumento identificado por seu tipo e nome.

 

Exemplo:

public class Pessoa {

   public String nome, apelido;

   public Float idade, peso, altura;

}

//esta classe ainda não foi instanciada (objetos)

 

Interfaces

As interfaces são estruturas muito parecidas com as classes, porém com um propósito diferente. Uma interface não possui atributos e sim somente operações.

 

O fato aqui é que as operações não são como nas classes, ou seja, em uma interface estas operações não possuem implementação.

 

Uma interface será utilizada para definir comportamentos que outros elementos, as classes, podem desejar implementar. Imagine então que queremos definir um tipo de comportamento que poderá ser implementado por mais de uma classe em nosso sistema, então este comportamento colocaremos em uma interface. A classe obrigatoriamente deverá possuir estas operações da interface implementadas nela, sendo que a implementação ficara na classe e não na interface.

 

Exemplo:

interface habilidade {

void correr();

void pular();

void parar();

}

//Após como ficaria a classe Pessoa, com suas novas operações implementadas.

public class Pessoa implements habilidade {

         public String nome, apelido;

         public Float idade, peso, altura;

public void correr() {

System.out.println("\nPessoa correndo");

}

public void pular(){

System.out.println(“\nPessoa pulando”);

}

public void parar(){

System.out.println(“\nPessoa parada”);

}

}