image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
Sergio Sousa
Sergio Sousa18/09/2024 10:10
Compartilhe

Diferença entre Objetos e Classes.

  • #JavaScript e Testes

Ultimamente, observei semelhanças entre objetos, classes, array e vetor. Na dúvida pesquisei no Chat GPT 3.5 e entendi que embora tenha alguma semelhança são muito diferentes a definição de cada uma e me deparei que existe um método de programação orientada chamada POO.

Então leia a pesquisa e tire suas conclusões.

A Programação Orientada a Objetos (POO) é um paradigma de programação que organiza o software em torno de "objetos", que são instâncias de classes. Esses objetos representam entidades do mundo real ou abstrações, encapsulando dados (propriedades) e comportamentos (métodos) em uma estrutura coesa. O principal objetivo da POO é facilitar a criação de software modular, reutilizável e fácil de manter.

1. Array:

Um array é uma estrutura de dados que armazena uma coleção de elementos do mesmo tipo. Cada elemento em um array é indexado, geralmente começando por 0, o que permite acessar diretamente qualquer item através de seu índice. Arrays podem ser unidimensionais (simplesmente uma lista de elementos) ou multidimensionais (como matrizes).

Exemplo em JavaScript:

javascript
Copiar código
let array = [10, 20, 30, 40];
console.log(array[1]);  // Saída: 20

2. Vetor:

Vetor é um termo frequentemente utilizado como sinônimo de array unidimensional, especialmente em contextos matemáticos ou científicos. Em linguagens como C ou C++, vetor é simplesmente um array de uma única dimensão. Na prática, vetor e array podem ser a mesma coisa, dependendo do contexto.

Exemplo em C:

c
Copiar código
int vetor[] = {1, 2, 3, 4};
printf("%d", vetor[0]);  // Saída: 1

Conceito de Classes e Objetos:

  • Classe: É uma definição ou um "molde" para criar objetos. Ela especifica quais propriedades e métodos os objetos criados a partir dessa classe terão.
  • Objeto: É uma instância de uma classe. Cada objeto criado a partir de uma classe tem seus próprios valores para as propriedades definidas pela classe.

Exemplo em JavaScript:

javascript
Copiar código
class Carro {
constructor(modelo, ano) {
  this.modelo = modelo;
  this.ano = ano;
}

buzinar() {
  console.log("Buzina: Beep beep!");
}
}

let meuCarro = new Carro("Fusca", 1976);
console.log(meuCarro.modelo);  // Saída: Fusca
meuCarro.buzinar();  // Saída: Buzina: Beep beep!

Aqui, Carro é uma classe, e meuCarro é um objeto instanciado dessa classe.

2. Encapsulamento:

O encapsulamento é o princípio de esconder os detalhes internos de um objeto e expor apenas o que é necessário para o uso. Isso significa que os dados de um objeto são acessíveis e modificáveis apenas através de métodos específicos, chamados de getters e setters, mantendo os dados protegidos de modificações externas indesejadas.

Exemplo:

javascript
Copiar código
class Pessoa {
constructor(nome, idade) {
  this._nome = nome;  // Usar "_" é uma convenção para indicar que a propriedade é privada
  this._idade = idade;
}

get nome() {
  return this._nome;
}

set nome(novoNome) {
  this._nome = novoNome;
}
}

let pessoa = new Pessoa("Ana", 25);
console.log(pessoa.nome);  // Saída: Ana
pessoa.nome = "Maria";
console.log(pessoa.nome);  // Saída: Maria

Neste exemplo, o encapsulamento é demonstrado com o uso de getters e setters para acessar e modificar o nome da pessoa.

3. Herança:

A herança permite que uma classe derive (ou "herde") de outra classe, aproveitando os atributos e métodos da classe pai (superclasse) enquanto adiciona ou modifica funcionalidades. Isso promove o reuso de código e a criação de hierarquias de classes.

Exemplo:

javascript
Copiar código
class Animal {
constructor(nome) {
  this.nome = nome;
}

fazerSom() {
  console.log("O animal faz um som.");
}
}

class Cachorro extends Animal {
fazerSom() {
  console.log("O cachorro late.");
}
}

let rex = new Cachorro("Rex");
rex.fazerSom();  // Saída: O cachorro late.

Aqui, Cachorro herda de Animal, mas sobrescreve o método fazerSom com um comportamento específico.

4. Polimorfismo:

O polimorfismo permite que classes derivadas de uma mesma classe base possam ser tratadas como objetos dessa classe base, mas com comportamentos diferentes. Ou seja, o mesmo método pode ter implementações diferentes dependendo da classe derivada.

Exemplo:

javascript
Copiar código
class Ave {
voar() {
  console.log("A ave voa.");
}
}

class Pinguim extends Ave {
voar() {
  console.log("Pinguins não podem voar.");
}
}

let ave = new Ave();
let pinguim = new Pinguim();

ave.voar();      // Saída: A ave voa.
pinguim.voar();  // Saída: Pinguins não podem voar.

Mesmo que Pinguim e Ave compartilhem o método voar, eles se comportam de maneiras diferentes devido ao polimorfismo.

5. Abstração:

A abstração é o processo de expor apenas os detalhes relevantes de um objeto, ocultando a complexidade interna. Isso torna o código mais simples de usar e compreender, focando no que o objeto faz em vez de como ele faz.

Em JavaScript, a abstração pode ser feita com classes e métodos que abstraem funcionalidades complexas, simplificando o uso dos objetos. Embora JavaScript não tenha suporte direto para classes abstratas (como em outras linguagens), você pode simular esse comportamento criando métodos que devem ser implementados nas subclasses.

Exemplo:

javascript
Copiar código
class Forma {
constructor(nome) {
  this.nome = nome;
}

calcularArea() {
  throw new Error("O método calcularArea deve ser implementado.");
}
}

class Retangulo extends Forma {
constructor(largura, altura) {
  super("Retângulo");
  this.largura = largura;
  this.altura = altura;
}

calcularArea() {
  return this.largura * this.altura;
}
}

let retangulo = new Retangulo(5, 10);
console.log(retangulo.calcularArea());  // Saída: 50

Aqui, Forma é uma classe base que define um método abstrato calcularArea, que precisa ser implementado pelas subclasses, como Retangulo.

Vantagens da POO:

  1. Reuso de código: Através da herança, você pode reutilizar código em diversas partes do programa, evitando duplicação.
  2. Manutenção facilitada: A modularidade e a estrutura de objetos e classes tornam o código mais organizado e fácil de manter.
  3. Facilidade de compreensão: A modelagem de objetos baseada no mundo real pode ser mais intuitiva para entender o comportamento de um sistema.
  4. Escalabilidade: A POO permite a criação de sistemas grandes e complexos de forma organizada
  5. .

Resumindo, a POO oferece uma maneira poderosa e organizada de estruturar seu código, promovendo modularidade, reutilização, e manutenibilidade.

Espero ter ajudado no compartilhamento de minha pesquisa e contribuído em fortalecer seus conhecimentos como desenvolvedor.

Valeu!

https://github.com/SergioDevSousa

https://www.linkedin.com/in/sergiosousa-tec/

Compartilhe
Comentários (2)
Giancarlo Rodrigues
Giancarlo Rodrigues - 18/09/2024 11:34

O texto ficou razoavelmente fácil de entender. Eu só acho que usar javascript para fazer os exemplos não é uma boa, já que javascript não é uma linguagem orientada a objetos de fato. O ideal seria usar java mesmo.. Pra mim nesse ponto o javascript mais confunde do que ajuda..

Erick Fuculo
Erick Fuculo - 18/09/2024 11:27

Legal, Sérgio! Seu artigo me fez pensar bastante e pesquisar mais sobre estes conceitos.

Achei interessante a parte em que o chat traz que um vetor nada mais é que um array de uma única dimensão, e que ambos são definidos como matrizes de dados. Entender isso foi essencial no início de meus estudos também.

Falando em POO, quando vi o termo "propriedade" para definir os "dados" de um objeto fiquei um pouco confuso, pois aprendi que os "dados" (especificamente as características) de um objeto eram chamados de atributos. No entanto, ao pesquisar mais a fundo encontrei esta discussão em que usuários do stackoverflow explicam a diferença de alguns termos.

Pelo que absorvi, os "dados/características" de um objeto são chamados de atributos quando falamos de seu valor (por exemplo quando um objeto carro tem o atributo "cor" definido como preto), e chamamos de propriedade quando falamos sobre o atributo e seus metodos de definir os seus valores. Basicamente, um é o dado e o outro é o código em si.

Seu artigo me ajudou a refrescar alguns conceitos que aprendi e me fez entender os limites de outros que foram além do que você nos trouxe. Foi de grande ajuda, parabéns!