15
DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a Objetos 01. Fundamentos de Métodos Um método é um bloco de linhas de código delimitado pela chave abrir, {, e pela chave fechar, }. A definição de um método possui o seguinte formato: <tipo retorno> nomeDoMétodo(tipo1 parâmetro1, tipo2 parâmetro2,...,tipon parâmetron) { //comandos return tipoDoRetornoDoMétodo; } joptioUm método possui um nome, ou identificador, (nomeDoMétodo) que deve sempre ser formado de forma semelhante aos identificadores de variáveis, iniciado com letra minúscula. Deve possuir um retorno que pode ser qualquer tipo de dado (int, float, vetor, String e outros) ou um void quando não possuir um retorno (<tipo retorno>). No caso de existir um retorno, deve ter uma linha com a instrução return <expressão> (return tipoDoRetornoDoMétodo;), onde <expressão> deve ser uma variável, uma constante ou uma expressão compatível com o tipo de retorno definido na declaração do método. Além disso, um método pode ter parâmetros (tipo1 parâmetro1, tipo2 parâmetro2,...,tipon parâmetron) . Se existir mais de um parâmetro, estes devem ser separados por vírgula. No formato geral de um método tem-se a parte <tipo retorno> nomeDoMétodo(tipo1 parâmetro1, tipo2 parâmetro2,...,tipon parâmetron) Essa parte é denominada de assinatura do método. Exemplo de um método: int somaDados(int par1, int par2) { int x = part1+part2; return x; } Note que return x; permite ao método retornar o resultado da soma dos dois parâmetros passados para a assinatura do método (no caso, par1 e par2, inteiros). Note

DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

01. Fundamentos de Métodos

Um método é um bloco de linhas de código delimitado pela chave abrir, {, e pela

chave fechar, }. A definição de um método possui o seguinte formato:

<tipo retorno> nomeDoMétodo(tipo1 parâmetro1, tipo2 parâmetro2,...,tipon parâmetron)

{

//comandos

return tipoDoRetornoDoMétodo;

}

joptioUm método possui um nome, ou identificador, (nomeDoMétodo) que deve

sempre ser formado de forma semelhante aos identificadores de variáveis, iniciado

com letra minúscula. Deve possuir um retorno que pode ser qualquer tipo de dado

(int, float, vetor, String e outros) ou um void quando não possuir um retorno (<tipo

retorno>). No caso de existir um retorno, deve ter uma linha com a instrução return

<expressão> (return tipoDoRetornoDoMétodo;), onde <expressão> deve ser uma

variável, uma constante ou uma expressão compatível com o tipo de retorno definido

na declaração do método. Além disso, um método pode ter parâmetros (tipo1

parâmetro1, tipo2 parâmetro2,...,tipon parâmetron). Se existir mais de um parâmetro, estes

devem ser separados por vírgula. No formato geral de um método tem-se a parte

<tipo retorno> nomeDoMétodo(tipo1 parâmetro1, tipo2 parâmetro2,...,tipon parâmetron)

Essa parte é denominada de assinatura do método.

Exemplo de um método:

int somaDados(int par1, int par2) {

int x = part1+part2;

return x;

}

Note que return x; permite ao método retornar o resultado da soma dos dois

parâmetros passados para a assinatura do método (no caso, par1 e par2, inteiros). Note

Page 2: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

que retorna o valor de x, que é do tipo inteiro, do mesmo tipo definido como retorno

do método, posicionado antes do nome do método do exemplo.

Se em main de um programa necessitamos somar dois valores usando o método

somaDados, deve-se criar uma linha com uma instrução semelhante a:

int resultado = somaDados(20,40);

Neste exemplo, a variável resultado receberá o valor retornado pela chamada do

método somaDados que recebe os valores 20 e 40. Sendo que 20 será armazenado no

par1 e 40 será armazenado no par2, pois esses parâmetros estão definidos na

declaração do método indicado. Assim, o método efetuará a soma de par1 com par2,

retornando o valor x que é 60. Dessa forma, a variável resultado receberá o valor 60

como retorno do método somaDados.

Quando um método não possui retorno, ele deve possuir um void como tipo de retorno,

indicando que o método não irá retornar nenhum parâmetro. Exemplo:

void mensagens(String msg){

System.out.println(msg);

}

Nesse exemplo, o método mensagens possui o parâmetro msg do tipo String e escreve

o conteúdo desse parâmetro com System.out.println. Assim, considere, como exemplo,

a seguinte instrução dentro do main de um determinado programa:

mensagens(“estou escrevendo isso”);

Neste caso, o programa chamará o método mensagens que receberá a String indicada,

armazenando-a no parâmetro msg. Em seguida, esse método escreve o conteúdo do

parâmetro. Finaliza sua execução e volta a executar a linha após a chamada do método.

Todo programa executável em Java possui o main, que é um método com um parâmetro

String. Assim, vamos considerar um programa denominado de Principal, desprezando

os seus imports, utilizando os dois métodos mostrados anteriormente:

Page 3: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Note que o programa (ou classe) Principal possui os métodos main, somaDados e

mensagens. Como o método main é o local onde as instruções são executadas, então

qualquer chamada dos métodos somaDados e mensagens deverá ser realizada dentro

do método main. Para que o método main possa reconhecer a execução dos outros dois

métodos, estes devem possuir a declaração static antes do tipo do retorno do método.

Assim, ajustando as declarações dos dois métodos, teremos, então, o código para a

chamada dos dois métodos, como se segue:

Page 4: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Observe que as linhas 5 e 6 possuem as respectivas chamadas aos métodos indicados,

sendo que somaDados recebe dois valores, 30 e 50, que são armazenados,

respectivamente, aos parâmetros par1 e par2, fazendo com que a variável x, em main,

receba 80 como resultado do método somaDados (linha 5). O método mensagens (linha

6), recebe a String indicada e a escreve, sem retorno, pois possui um void em sua

declaração (ou assinatura). Note que os dois métodos receberam a palavra static antes

dos respectivos tipos de retorno (int e void).

Não esqueça que os parâmetros de um método passam a ser variáveis dentro do

respectivo método. Assim, os parâmetros par1 e par2 do método somaDados passam a

ser variáveis reconhecidas apenas dentro do método somaDados. Os outros métodos

não reconhecem esses parâmetros. A variável x do método somaDados é também

reconhecida apenas dentro do método somaDados, mesmo que possua o mesmo nome

da variável x definida em main, são variáveis distintas. A variável x do método main é

denominada de variável global, pois é reconhecida e pode ser utilizada por qualquer

método dentro da classe Principal. Enquanto que a variável x do método somaDados é

denominada de variável local, pois só é reconhecida dentro do método que ela

pertence. Você pode estar perguntando, não possuem o mesmo nome? Então, é a

mesma variável! Não. O programa Java define essas duas variáveis em locais distintos

da memória, uma sendo local e a outra global. A maneira de distinguir uma da outra

dentro de um programa ou classe será explicada posteriormente.

02. Programação Orientada a Objetos (POO)

Os conceitos da Programação Orientada a Objetos (POO) surgiram no final da

década de 60 com a linguagem Simula-68. Tais conceitos foram aprimorados com a

linguagem Smalltalk. A popularização da POO só ocorreu com as linguagens C++ e Java.

Na POO um programa é visto como um conjunto de objetos que se comunicam

através de mensagens, como está ilustrado a seguir.

Figura 1.1

Page 5: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Na POO os objetos são representados por variáveis de memória.

03. OBJETOS

Na POO os objetos são utilizados para representar entidades do mundo real. Isto

é: são usados para representar a abstração da realidade para solucionar um

determinado problema. Abstrair a realidade é desprezar o que é irrelevante. Assim, se

observarmos ao nosso redor, é fácil visualizar objetos como pessoas, carros, móveis,

casas e livros, por exemplo, que podem ser representados por objetos em um programa

para abstrair essas realidades e solucionar problemas do cotidiano. É evidente que irão

existir objetos animados e inanimados.

Independente se é do tipo animado ou inanimado, concreto (palpável) ou

abstrato, um objeto possui certas características que permitem identificá-lo mais

facilmente. Essas características são denominadas de ATRIBUTOS. Além disso, os objetos

podem também ter COMPORTAMENTOS associados. Um comportamento representa

uma ação que o objeto executa. Assim, um objeto pessoa, por exemplo, pode ter os

atributos nome, cpf, profissão, altura e peso; e como comportamentos pode efetuar as

ações andar, saltar e comer, por exemplo. Um objeto carro, por outro lado, pode ter os

atributos marca, modelo, cor e potência; e como comportamentos pode, por exemplo,

acelerar e frear.

A figura seguinte ilustra a representação de um objeto, destacando seus

atributos e comportamentos.

Figura 3.1

A figura seguinte ilustra a representação dos objetos pessoa e carro.

Page 6: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Figura 3.2

Portanto, na POO as características dos objetos são denominadas de ATRIBUTOS

ou DADOS e os comportamentos são denominados de OPERAÇÕES ou MÉTODOS.

04. CLASSES

Se observarmos ao nosso redor, existem objetos com as mesmas semelhanças.

Assim, os objetos são classificados conforme essas semelhanças. Por exemplo, podemos

classificar os animais como felinos, domésticos e mamíferos. Como outro exemplo,

podemos classificar os transportes em terrestres, aquáticos e aéreos. Na POO, os

objetos também são agrupados conforme suas características e comportamentos.

A Programação Orientada a Objetos utiliza o conceito de CLASSE para modelar e

codificar os objetos que possuem as mesmas características e comportamentos. Assim,

cada classe funciona como um modelo (ou molde) para a criação de um objeto. Os

objetos criados de uma classe são também denominados de INSTÂNCIAS. Assim, se

considerarmos a classe hipotética denominada de Carro, quando criarmos três objetos

dessa classe, estaremos criando três estâncias da classe Carro.

A próxima figura ilustra a representação do código da classe Carro e três

instâncias (objetos) dessa classe.

Figura 4.1

Page 7: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

05. CLASSES JAVA

Cada programa em Java é uma classe.

Um programa fonte em Java possui a extensão .java. Um programa Java

compilado possui a extensão .class.

Uma aplicação Java pode ter diversos arquivos compilados, na extensão

.class, formando o programa executável, com a extensão .jar .

A figura a seguir ilustra esses detalhes.

Figura 5.1

Seja o exemplo de código Java, a seguir, que ilustra a classe Carro:

Figura 5.2

De acordo com o trecho de código anterior, o termo class é uma palavra

reservada da linguagem Java. Os elementos dentro de uma classe devem estar

delimitados entre chaves. Carro é o nome da classe. O nome de uma classe deve

começar sempre com letra maiúscula. Os atributos devem ser declarados com um tipo

de dado e um identificador. Ou seja, um atributo é uma variável.

Page 8: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Sabe-se que programar é apresentar a solução de um problema em uma

linguagem de programação e isso é possível pela utilização do princípio da abstração,

através do qual desprezamos o que não for importante para a solução do problema,

ou seja, consideramos apenas os detalhes que são relevantes para a solução de um

problema. Assim,

“....se formos programar um sistema para uma locadora de veículos, precisamos saber

algumas informações sobre a pessoa que irá alugar o veículo, como o seu nome, habilitação

de condutor, idade e o que mais acharmos relevante. Porém, é muito pouco provável que

iremos exigir dados escolares das pessoas, como notas de uma disciplina etc (visto que esse

tipo de informação é irrelevante para a locação de veículos)...”

(www.metropoledigital.ufrn.br)

Para sabermos o que é relevante ou não, temos que efetuar o levantamento de

requisitos para estabelecermos o domínio do problema. O domínio do problema é o

conjunto das classes que serão utilizadas para compor a solução do problema.

06. COMPORTAMENTO NA POO

Como foi explicado anteriormente, uma classe, além dos seus atributos, possui

comportamentos. Um comportamento expressa ações que os objetos (ou instâncias) de

uma classe podem executar. No caso da classe Carro, por exemplo, podemos ter ações

como acelerar, frear e desacelerar, por exemplo.

Na programação OO um comportamento é expresso através de métodos. Um

método, como já foi explicado anteriormente, é um bloco de código entre chaves que

fica localizado dentro de uma classe.

Um método necessita de um tipo de retorno, de um nome (ou identificador do

método) e de uma lista de parâmetros.

O tipo de retorno pode ser um inteiro, um decimal, uma String ou qualquer

outro tipo de dado aceito pela linguagem Java. Utiliza-se a palavra reservada void

quando um método não efetua um retorno.

O identificador ou nome de um método é constituído de forma semelhante ao

identificador de uma variável (ver tópico correspondente).

Um parâmetro é definido em um método com um TIPO e um IDENTIFICADOR.

Um parâmetro é utilizado em um método para receber valores enviados ao método por

outras partes da aplicação. Como exemplo, considere um método que recebe um valor

Page 9: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

e processa cada parte desse valor e retorna uma String contendo esse valor por extenso.

Portanto, esse método terá um parâmetro numérico que armazenará o valor repassado

e, neste caso, o método, após as suas respectivas instruções, retornará uma String com

a descrição por extenso do valor informado.

Figura 6.1

A lista de parâmetros é opcional em um método, pois depende da

funcionalidade do mesmo. Uma lista de parâmetros pode ter um ou mais parâmetros.

Caso possua mais de um parâmetro, deve-se separá-los por vírgula.

Vamos considerar, por exemplo, que a classe Carro possua um comportamento

que permita mudar a cor de seus objetos através do método retornaCor. Observe a

declaração desse método:

Figura 6.2

Page 10: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Esse método recebe uma String, enviada de algum lugar da aplicação, que é

armazenada no parâmetro pCor, do tipo String. Em seguida, faz o atributo cor receber

o conteúdo de pCor. Em seguida, retorna o conteúdo String, do atributo cor, visto que

o método possui como retorno um tipo String.

Para forçar um método a retornar um conteúdo usa-se return conteúdo, desde

que esse conteúdo seja compatível com o tipo do retorno do método.

Se um método possui um determinado retorno e não foi usado o return no

método, ocorrerá um erro na compilação.

Considere outro exemplo, agora para uma classe denominada de Calculo,

conforme está definida a seguir:

Figura 6.3

Essa classe apresenta o conceito de variável local.

Uma variável local é declarada dentro de um método e ela só existirá na

memória enquanto o método estiver sendo executado em um programa. Além disso,

uma variável local só é reconhecida pelo método que a contem. Assim, no exemplo

anterior, a variável local int total, do método produto, não é reconhecida pelo método

somaNumeros. Isso ocorre porque, mesmo que possuindo o mesmo nome do atributo

total da classe, essa variável foi criada dentro desse método. Por outro lado, os atributos

de uma classe são reconhecidos por qualquer método da respectiva classe. No exemplo

anterior, os atributos x, y e total são reconhecidos nos dois métodos da classe Calculo.

Page 11: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Mas, como é possível uma mesma classe possuir duas variáveis com o mesmo

nome? No caso do exemplo da classe Calculo, temos o atributo total, que é definido

fora dos métodos, no início da classe, e a variável local total que é definida dentro do

método produto. Essas duas variáveis são distintas: uma é um atributo da classe e a

outra é uma variável local.

É possível atribuir o conteúdo da variável local total ao atributo total da classe

Calculo e vice-versa? Sim, é possível. Neste caso, utiliza-se o this para referenciar o

atributo da classe, da seguinte forma:

this.total = total;

Em outras palavras, temos o seguinte: atribua o conteúdo da variável total (do

lado direito do sinal de =) ao atributo total desta (this) classe.

Portanto, usa-se o this para referenciar os atributos dentro dos métodos classe

a que pertencem.

07. INSTANCIANDO OBJETOS / MÉTODOS CONSTRUTORES

Um método construtor possui o mesmo nome da classe e se inicia com uma letra

maiúscula, igual ao da classe.

Um método construtor é responsável por criar os objetos na memória do

computador, alocando um endereço de memória específico.

Para se criar um objeto de uma determinada classe utiliza-se da palavra

reservada new, no seguinte formato:

nomeDaClasse identificador = new métodoConstrutor();

Como exemplo, vamos considerar a classe Carro, apresentada no inicio do tópico

5, e criar um objeto objCarro:

Carro objCarro = new Carro();

A instrução anterior significa: “crie o objeto objCarro do tipo Carro usando o

construtor Carro(). A partir desse ponto, o programa poderá referenciar o objeto (ou

variável) objCarro e acessar suas propriedades e seus prováveis métodos.

Page 12: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Resumindo: O método construtor é aquele que é executado quando uma nova

instância é criada.

Mas, uma pergunta surge: como posso criar um objeto Carro, como objCarro, se

não tenho um método construtor na classe Carro, criada no tópico 05?

Quando uma classe não possui um método construtor, a linguagem Java utiliza o

método construtor da classe “responsável” por todas as classes Java, denominada de

Object. Neste caso, esse método inicializa todos os atributos da classe com valores

padrão (tipos numéricos com zero (0), String com null, booleanos com false).

Para uma melhor compreensão, vamos ampliar o código de nossa classe Carro

apresentada no inicio do tópico 05.

Note que o método construtor public Carro() foi acrescentado na classe, sendo

que cada um dos atributos da referida classe foram inicializados dentro do método

construtor.

O TERMO public INDICA QUE O MÉTODO PODE SER ACESSADO POR QUALQUER

CLASSE DE UMA APLICAÇÃO. É UM TERMO USADO PARA DAR VISIBILIDADE AOS

MÉTODOS E ATRIBUTOS DE UMA CLASSE.

ALEM DE public TEMOS private e protect.

Page 13: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Quando qualquer objeto do tipo Carro for criado, ele possuirá, como padrão, a

marca igual à VW, o modelo igual a Gol, a cor igual a azul e a potência igual a 1000

cilindradas, devido esse método construtor existente na classe Carro.

A linguagem Java permite a criação de vários métodos com o mesmo nome,

desde que tenham ou parâmetros de tipos diferentes, ou quantidade de parâmetros

diferentes ou posições dos tipos diferentes.

Essa regra também se aplica aos métodos construtores.

Assim, uma classe pode ter mais de um método construtor, desde que respeitem

a regra citada anteriormente.

Quando uma classe possui vários métodos com o mesmo nome se está

utilizando o conceito denominado de SOBRECARGA DE MÉTODOS.

Observe o exemplo a seguir, no qual ampliamos o código da classe Carro com

alguns métodos construtores e com o método que permite alterar a cor de um carro:

Sejam as seguintes instruções Java:

Carro objCarroX = new Carro(1500);

Carro objCarroY = new Carro(1600,”GM”);

As duas instruções criam dois objetos do tipo Carro, cada uma utiliza um

construtor diferente. Assim, o objCarroX fica com a potência igual a 1500 (passado como

Page 14: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

parâmetro), marca igual a VW, modelo igual a Gol e cor igual a azul. O objCarroY fica

com a potência igual a 1600 e a marca igual a GM (passados como parâmetros), modelo

igual a Gol e cor igual a azul.

Para uma melhor compreensão, considere um programa denominado de

Programa01 que possui o método main e dentro desse método vamos criar uma

instância da classe Carro, como indicado a seguir:

Note que foi criado o objeto (ou instância) meuCarro com a potência 1500.

Nesse caso, acionou-se o método construtor public Carro(int potencia). Em seguida,

alterou-se a marca para Fiat e o modelo para Uno. A cor do carro foi alterada chamando-

se o método retornaCor com o parâmetro prata.

Note que foi possível referenciar alguns atributos do objeto meuCarro através

do uso de um ponto (como em meuCarro.marca). O ponto também foi usado para

referenciar uma chamada ao método retornaCor (em meuCarro.retornaCor(“prata”)).

Essa forma de acessar os atributos e métodos com um ponto é possível desde que o

respectivo atributo e o respectivo método tenham permissão para essa forma de acesso,

caso contrário ocorrerá erro.

Quando se tem o método main em uma classe, como a classe Programa01, da

ilustração anterior, mas considerando que essa classe também possua outros métodos

como, por exemplo, somaDados e mensagens, é possível efetuar a chamada desses

outros dois métodos dentro de main sem que os mesmos sejam estáticos (usando o

static na declaração do método). Isso é possível quando se cria um objeto da classe

dentro da própria classe. Considere, como exemplo, a classe Principal que foi

demonstrada anteriormente, indicada aqui para você se lembrar:

Page 15: DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM … · DEPARTAMENTO DE COMPUTAÇÃO CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Fundamentos de Orientação a

DEPARTAMENTO DE COMPUTAÇÃO

CURSO DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

Fundamentos de Orientação a Objetos

Note que essa classe, como foi visto anteriormente, define os métodos somaDados e

mensagens, além do próprio método main que é naturalmente static. No entanto, é

possível definir esses métodos sem ser static. Para isso, criamos um objeto da própria

classe Principal dentro de main e chamamos os outros dois métodos através desse

objeto. Observe a mudança no código no próximo exemplo:

Observe a linha 4 do exemplo anterior. Ela possui a criação do objeto princ da própria

classe Principal. A partir desse momento, os métodos são chamados usando o objeto

princ seguido de um ponto e, depois, o nome de cada método. Para completar, as

declarações dos métodos somaDados e mensagens não possuem mais o static.

Qualquer dúvida procure o professor.