Você está na página 1de 9

Programação Orientada a Objetos Aula 3 - Construtores e Objetos

Programação Orientada a Objetos


Aula 03 - Construtores e Objetos

Material Didático do Instituto Metrópole Digital - IMD

Termo de uso

Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-

SemDerivados CC BY-NC-ND. Você possui a permissão para realizar o download e compartilhar, desde que atribua os créditos do

autor. Não poderá alterá-los e nem utiliza-los para fins comerciais.

Atribuição-SemDerivações-SemDerivados

CC BY-NC-ND

https://creativecommons.org/licenses/by-nc-nd/4.0/

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 1


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

Apresentação
Nesta aula, você vai colocar seus conhecimentos em prática escrevendo um
programa real na linguagem TypeScript. Além disso, iremos aprender como
acontece a criação de um objeto, figura central da Programação Orientada a
Objetos, aprofundar seu conhecimentos em TypeScript, além de definir uma melhor
estrutura para o nosso projeto.

Objetivos
Conhecer o conceito e a criação dos métodos construtores;
Aprender como criar um objetos utilizando construtores;
Conhecer mais detalhes a respeito do tsconfig.json

Conceitos: Construtores e Objetos


Link do video da aula: https://youtu.be/QMYy1r720M0

Construindo objetos
Antes de tudo, é preciso ter em mente que objetos são construídos, você NÃO pode
criar um novo objeto sem invocar um construtor. Construtores representam o
código que roda sempre que você usa a palavra-chave new.

Toda classe DEVE ter um construtor. Mas isso não significa que o programador tem
que necessariamente codificar um. Caso não seja explicitamente declarado, o
compilador criará um por padrão. Exemplo de uso do construtor padrão:

let c = new Carro();


c.cor = "Vermelho";
console.log(c.cor);

Observe que quando utilizamos o operador new não existem argumentos (ou
parâmetros) dentro dos parênteses. Isso significa que podemos usar o construtor
padrão (ou, em inglês, default).

Métodos construtores
O que são construtores?
São métodos especiais para a criação e inicialização de novas instâncias de
classe (objetos);
Inicializam o novo objeto e seus atributos;
Realizam todas as outras operações que ele precisa para ser inicializado.

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 2


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

O que faz o operador new?

Ele inicializa o novo objeto e seus atributos

Criando um método construtor

export class Carro{

modelo: string;
_cor: string;
placa: string;
numPortas: number;

constructor(modelo:string, cor: string, placa: string,


numPortas: number){
this.modelo = modelo;
this._cor = cor;
this.placa = placa;
this.numPortas = numPortas;
}

Você consegue notar o que está faltando? Cadê o tipo de retorno? Existem dois
pontos importantes que devemos notar a respeito dos construtores. Primeiro, é que
eles não têm tipo de retorno, segundo, que devemos utilizar a palavra reservada
constructor.

Mas, se a classe não tiver método construtor? O objeto ainda pode ser criado
usando a instrução (ou operador) new. Mas, nesse caso, será provavelmente
necessário chamar métodos de acesso (set) para definir valores para os atributos
da classe.

Criando um objeto a partir do construtor definido anteriormente:

let c = new Carro("Fiesta","Vermelha","AEC-9898",4);

Observe que quando criamos o objeto já passamos os valores como parâmetro para
o construtor, com isso definindo na hora da criação do objeto os valores dos
atributos.

Características do método construtor


Não tem retorno;
Não tem nome;
James Peter Gomes Da Silva Barbosa IMD/UFRN Página 3
Programação Orientada a Objetos Aula 3 - Construtores e Objetos

Usa a palavra-chave constructor.

Construtor com parâmetro opcional


Até agora vimos que é possível definir construtor com parâmetros e construtor
padrão, vazio, sem nenhum parâmetro passado no momento da criação do objeto.
Mas, se o problema que estivermos trabalhando exigir diferentes construtores para
diferentes momentos? O Typescript não permite sobrecarga de construtores, porém
para resolver esse problema podemos utilizar um recurso que a linguagem
disponibiliza: parâmetro opcional. Os parâmetros opcionais são definidos com um
sinal de interrogação após o nome do parâmetro e devem ser sempre o último ou
os últimos parâmetros. Vejamos um exemplo:

constructor(modelo:string, cor: string, placa?: string, numPortas?:


number){
this.modelo = modelo;
this.cor = cor;
this.placa = placa;

if(numPortas != undefined){
this.numPortas = numPortas;
}else{
this.numPortas = 2;
}
}

Importante: Quando temos parâmetros opcionais é preciso tratá-los para não


receber valores undefined e provocar erros futuros no código. Veremos mais
adiante uma outra forma de tratá-los, que é utilizando parâmetro com valor padrão.

Abaixo, segue um exemplo de como criar uma instância do objeto carro na variável
c que recebe todos os parâmetros, porém a variável c2 só recebe os parâmetros
obrigatórios.

let c = new Carro("Fiesta","Vermelha","AEC-9898",4);

let c2 = new Carro("Gol","Branca");

Prática: Construtores e Objetos


Link do video da aula: https://youtu.be/-Cr3_Ccfh1g

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 4


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

Definindo a estrutura do projeto


Para esta prática você deverá definir uma nova estrutura para o projeto. Veja na
figura 1 o modelo da estrutura que será utilizada. Além disso, você deve separar os
arquivos typescript dos arquivos de saída após o transpiler, definir melhor o arquivo
de configuração tsconfig.json e criar um arquivo que será nosso executável do
projeto, chamado app.ts.

Figura 1 - Modelo de estrutura

Arquivo tsconfig.json
O arquivo tsconfig.json em um diretório, indica que esse diretório é a raiz do projeto
Typescript. O arquivo tsconfig.json especifica as configurações de compilação
necessárias para o projeto.

{
"compilerOptions": {
"target": "es5",
"outDir": "app/js",
"noEmitOnError": true
},

"include": [
"app/ts/**/*"
]
}

Segue a definição de cada propriedade utilizada na configuração do tsconfig.json


acima:

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 5


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

target: define para qual versão do javascript os arquivos .ts serão


transpilados;
outDir: define diretório dos arquivos Javascript após o processo de transpiler
noEmitOnError: essa opção definida como true impede que códigos
Typescript com erros sejam transpilados para Javascript
include: define os diretórios que o compilador irá compilar ao executar o
comando tsc

Classe Carro
export class Carro{

modelo: string;
_cor: string;
placa: string;
numPortas: number;

constructor(modelo:string, cor: string, placa: string,


numPortas: number){
this.modelo = modelo;
this.cor = cor;
this.placa = placa;
this.numPortas = numPortas;
}

get cor(): string{


return this._cor;
}

set cor(cor: string){


this._cor = cor;
}
}

Arquivo app.ts

import { Carro } from './carro';

let c:Carro;
c = new Carro("Fiesta","Vermelha","AEC-9898",4);

c.cor = "Vermelha";

let c2 = new Carro("Gol","Branca","XYZ-8787,2);

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 6


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

c2.cor = "Branca"

console.log(`A cor do carro ${c.modelo} é ${c.cor}`);


console.log(`A cor do carro ${c2.modelo} é ${c2.cor}`);
//console.log(c2.cor);

Trabalhando com Parâmetros


Opcionais
Link do video da aula: https://youtu.be/JBhwW2VFe6E

Classe Carro
export class Carro{

modelo: string;
_cor: string;
placa: string;
numPortas: number;

constructor(modelo:string, cor: string, placa?: string,


numPortas?: number){
this.modelo = modelo;
this.cor = cor;
this.placa = placa;

if(numPortas != undefined){
this.numPortas = numPortas;
}else{
this.numPortas = 2;
}
}

get cor(): string{


return this._cor;
}

set cor(cor: string){


this._cor = cor;
}
}

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 7


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

Arquivo app.ts
import { Carro } from './carro';

let c:Carro;
c = new Carro("Fiesta","Vermelha","AEC-9898",4);

c.cor = "Vermelha";

let c2 = new Carro("Gol","Branca");


c2.cor = "Branca"

console.log(`A cor do carro ${c.modelo} é ${c.cor} e com


${c.numPortas} portas. `);
console.log(`A cor do carro ${c2.modelo} é ${c2.cor} e com
${c2.numPortas} portas.`);
//console.log(c2.cor);

Sobrecarga de métodos ou funções


Na vídeo da aula passada, vimos que não é possível fazer sobrecarga de
construtores, porém o TypeScript fornece o conceito de sobrecarga de função ou
métodos. Ele permite várias funções ou métodos com o mesmo nome, mas
diferentes tipos de parâmetro e tipo de retorno. No entanto, o número de
parâmetros deve ser o mesmo.

Vamos a um exemplo:

class Teste{

public exec(a:string, b:string):string;

public exec(a:number, b:number): number;

public exec(a: any, b:any): any {


return a + b;
}

let t = new Teste()

console.log(t.exec(4,5));

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 8


Programação Orientada a Objetos Aula 3 - Construtores e Objetos

console.log(t.exec('a','b'));

No exemplo acima, temos o mesmo método exec() com duas declarações e uma
implementação. A primeira assinatura possui dois parâmetros do tipo string,
enquanto a segunda possui dois parâmetros do tipo number.

O último método deve ter a implementação. Como o tipo de retorno pode ser string
ou number de acordo com as duas primeiras declarações, devemos usar
parâmetros compatíveis e tipo de retorno como any na definição da função.

ATENÇÃO! A sobrecarga de métodos ou função com diferentes números de


parâmetros e tipos com o mesmo nome, não é suportada.

Portanto, para atingir a sobrecarga de métodos, devemos declarar todos os


métodos com assinaturas possíveis. Além disso, a implementação do método deve
ter tipos compatíveis para todas as declarações.

Resumo
Nesta aula, você aprendeu a trabalhar com construtores, a instanciar objetos e a
utilizar parâmetros opcionais para atender necessidades diferentes durante o
desenvolvimento de uma solução. Foi definida uma estrutura de projeto mais
organizada e o arquivo tsconfig.json foi configurado com diversas opções para o
compilador (transpilador) do Typescript.

James Peter Gomes Da Silva Barbosa IMD/UFRN Página 9

Você também pode gostar