Você está na página 1de 21

COMPLEXO ESCOLAR POLITÉCNICO

GIRASSOL
CURSO TÉCNICO DE INFORMÁTICA

MATERIAL DE APOIO À DISCIPLINA DE TÉCNICAS E LINGUAGENS DE PROGRAMAÇÃO

PROGRAMAÇÃO ORIENTADA A OBJECTOS

Professor: Cedrick Mansoni


PARADIMA DE PROGRAMAÇÃO

Um paradigma de programação é uma abordagem ou estilo particular


de programação que fornece diretrizes e estruturas para a resolução de
problemas computacionais. Cada paradigma tem seus próprios
conceitos, princípios e práticas que definem como os programas devem
ser estruturados e organizados. Abaixo estão alguns dos paradigmas de
programação mais comuns:

❑ Programação Procedural;
❑ Programação Orientada a Objectos (POO);
❑ Programação Funcional;
❑ Programação Lógica;
❑ Programação Orientada a Eventos;
❑ Programação Concorrente;
❑ Programação Baseada em Componentes.

Professor: Cedrick Mansoni


PROGRAMAÇÃO ORIENTADA A OBJECTOS (POO)

A Programação Orientada a Objetos (POO) é um paradigma de


programação que utiliza conceitos baseados em objetos para organizar
e estruturar o código. Neste estilo de programação, os objetos são
instâncias de classes.

Classe
É uma estrutura que define um tipo de objeto. Ela funciona como um
modelo ou um modelo para a criação de objetos. Uma classe encapsula
dados (atributos) e comportamentos (métodos) relacionados a um
conceito específico do mundo real.
Atributos
São características ou propriedades que descrevem o estado do objecto.
Exemplo 01:
Para uma classe Pessoa, os atributos podem incluir nome, idade e nif.

Professor: Cedrick Mansoni


Métodos
Além dos atributos, uma classe também define métodos, que são as
ações que os objectos dessa classe podem executar.
Exemplo 01:
Para a classe Pessoa, métodos podem incluir andar(), falar() e
trabalhar().

Instância
Quando criamos um objecto a partir de uma classe, estamos
instanciando essa classe. Cada instância é um objecto separado e
independente, com seus próprios valores de atributos.

A POO é baseada em quatro pilares fundamentais:


❑ Abstração;
❑ Herança;
❑ Encapsulamento;
❑ Polimorfismo.
Professor: Cedrick Mansoni
ABSTRAÇÃO

Abstração envolve a simplificação de objetos do mundo real em


modelos mais simples e representativos no código. Isso permite que os
programadores se concentrem nos aspectos essenciais do problema
sem se preocupar com todos os detalhes complexos.

Exemplo 01:
Suponha que estamos a desenvolver um sistema que lida com veículos.
Em vez de se preocupar com todos os detalhes específicos de cada
veículo, você pode criar uma classe abstrata “Veiculo” que representa os
atributos e comportamentos comuns a todos os veículos, como
velocidade, cor e métodos para ligar/desligar.

Neste exemplo, Veiculo é uma abstração que encapsula as


características essenciais de qualquer veículo, sem se preocupar com os
detalhes específicos.
Professor: Cedrick Mansoni
ABSTRAÇÃO
Abstração é um processo mental, onde você programador(a) deves pegar elementos da vida real
que pretendes mapear para o mundo virtual, e escolher quais propriedades e métodos devem
ser implementados em função da natureza do projecto que está a ser desenvolvido.
public class Veiculo
{
public string? Marca {get; set;}
public string? Modelo {get; set;}
public string? Cor {get; set;}
public DateTime Data{get; set;}

public void Acelerar()


{

}
public void Frear()
{

}
}

Professor: Cedrick Mansoni


HERANÇA

Herança permite que uma classe (subclasse ou classe derivada) herde


atributos e métodos de outra classe (superclasse ou classe base). Isso
promove a reutilização de código e a criação de hierarquias de classes,
onde as classes mais específicas podem herdar características de classes
mais genéricas.

OBS:
Uma classe base é também considerada como uma classe genérica, isso
significa que a partir dela podem derivar classes específicas, que
também são conhecidas como subclasse.

Vamos considerar o exemplo 01, e criar uma ou mais classes que


derivam da classe veículo.

Professor: Cedrick Mansoni


HERANÇA
Para indicarmos que uma classe herda os
membros(propriedades e métodos) da outra classe,
usamos o sinal dois pontos ( : ) depois do nome da
subclasse, e depois do sinal ( : ) escrevemos o nome da
classe base.

Exemplo 03:

public class VeiculoTerrestre : Veiculo

public class VeiculoTerrestre : Veiculo public class VeiculoAquatico : Veiculo


{ {
public string? Tipo{get; set;} public string? ProfundidadeMaxima{get; set;}
} }

public class Moto : VeiculoTerrestre public class Navio : VeiculoAquatico


{ {
public int Matricula{get; set;} public float Boca{get; set;}
} }

Professor: Cedrick Mansoni


HERANÇA

Deste exemplo podemos instanciar objectos a partir das subclasses Moto


e Barco.
Instanciar um objeto, é criar uma cópia específica da classe, isso nos
permite trabalhar com dados e public static class Program
comportamentos específicos dessa {
instância. Podemos criar múltiplas public static void Main(string[] args)
{
instâncias da mesma classe, cada Moto moto1 = new Moto()
uma representando um objeto {
independente com seus próprios Marca = "Honda",
valores de atributos e estado. Modelo = "Forza 350",
Cor = "Azul",
Tipo = "Transportes rodoviários",
OBS: Matricula = "LDA-28-62-RP"
O objecto moto1 é uma instância };
}
da classe Moto. }

Professor: Cedrick Mansoni


ENCAPSULAMENTO

O encapsulamento consiste na protecção dos detalhes internos da


implementação de uma classe, permitindo que apenas métodos
específicos manipulem os dados internos.

Os atributos de uma classe podem ser marcados como privados(private), o


que significa que só podem ser acessados dentro da própria classe. Isso
impede o acesso direto a esses atributos de fora da classe.

OBS:
As propriedades fornecem um meio elegante de acessar e modificar os
atributos de uma classe. Elas encapsulam a lógica de leitura e escrita em
métodos especiais chamados "getters" e "setters".

Professor: Cedrick Mansoni


ENCAPSULAMENTO

Os métodos getter e setter são conceitos comuns em linguagens de


programação orientada a objectos e são utilizados para acessar e
modificar os valores dos atributos de uma classe de maneira controlada.
Eles ajudam a implementar o princípio de encapsulamento, que consiste
em proteger os detalhes internos de uma classe e fornecer uma interface
controlada para interagir com esses detalhes.

Getter (Método de Acesso):


Um método getter é usado para obter o valor de um atributo privado de
uma classe.

Setter (Método de Modificação):


Um método setter é usado para modificar o valor de um atributo privado
de uma classe.

Professor: Cedrick Mansoni


public class Veiculo
{
private string? marca; // atributo privado
public string? Marca // atributo publico
{
get {return marca;}
set { marca = value; }
}
private string? modelo; // atributo privado
public string? Modelo // atributo publico
{
get {return modelo;}
set {modelo = value;}
}
private string? cor; // atributo privado
public string? Cor // atributo publico
{
get {return cor;}
set {cor = value;}
}
}

Professor: Cedrick Mansoni


POLIMORFÍSMO

É um conceito fundamental da Programação Orientada a Objetos (POO)


que significa "muitas formas". Ele permite que objectos de diferentes
classes sejam tratados de maneira uniforme quando pertencem a uma
mesma hierarquia. Existem dois tipos principais de polimorfismo:
polimorfismo de sobrecarga e polimorfismo de sobreposição.

Professor: Cedrick Mansoni


POLIMORFÍSMO
Polimorfismo de Sobrecarga (Overloading)
O polimorfismo de sobrecarga refere-se à capacidade de uma classe ter
vários métodos com o mesmo nome, mas com parâmetros diferentes. Isso
é conhecido como sobrecarga de métodos.
public class Taxi
{
public string CalcularCustoViagem(double distancia, double consumo, string tipo)
{
double precoCombustivel = tipo == "Gasolina" ? 300.0 : 160;
return (distancia / consumo) * precoCombustivel;
}

public string CalcularCustoViagem(int Passageiros , double custoPorPassageiro)


{
return (Passageiros * custoPorPassageiro);
}
}

Professor: Cedrick Mansoni


POLIMORFÍSMO
public static void Main(string[] args)
{

Taxi meuCarro = new Taxi();

// Calcula o custo da viagem com base no consumo de combustível


double custoViagem1 = meuCarro.CalcularCustoViagem(17.67, 250.0, "Gasolina");
Console.WriteLine($"Custo da viagem com base no consumo de combustível: Kz -
. {custoViagem1}");

// Calcula o custo da viagem com base no número de passageiros


double custoViagem2 = meuCarro.CalcularCustoViagem(4, 150.0);
Console.WriteLine($"Custo da viagem com base no número de passageiros: Kz . . . .
. {custoViagem2}");

Professor: Cedrick Mansoni


POLIMORFÍSMO
Polimorfismo de Sobreposição
O polimorfismo de sobreposição ocorre quando uma classe derivada
fornece uma implementação específica para um método que já está
definido em sua classe base. Isso permite que objetos da classe derivada
sejam usados no lugar de objetos da classe base, mantendo o
comportamento específico da classe derivada. A sobreposição é alcançada
usando a palavra-chave override no método da classe derivada e a palavra-
chave virtual no método da classe base.

// Método da class base, ou seja, método que será sobreposto


public virtual double CalcularCustoViagem(double distancia, double consumoCombustivel)

// Método da class derivada, ou seja, método que vai sobrepor


public override double CalcularCustoViagem(double d, double c)

Professor: Cedrick Mansoni


POLIMORFÍSMO

public class Taxi


{
// Método que será sobreposto nas classes derivadas
public virtual double CalcularCustoViagem(double distancia, double consumo , bool cartao = false)
{
double precoCombustivel = 300.0;
return (distancia / consumo) * precoCombustivel;
}

// Método que será sobreposto nas classes derivadas


public virtual double CalcularCustoViagem(int numeroPassageiros)
{
double custoFixoPorPassageiro = 150.0;
return (custoFixoPorPassageiro * numeroPassageiros);
}
}

Professor: Cedrick Mansoni


POLIMORFÍSMO
public class Particular : Taxi
{
// Sobreposição do método CalcularCustoViagem da classe base
public override double CalcularCustoViagem(double d, double c , bool cartao)
{
double precoCombustivel = cartao == true ? 160.0: 300.0;
return (d / c) * precoCombustivel;
}

// Sobreposição do método CalcularCustoViagem da classe base


public override double CalcularCustoViagem(int numeroPassageiros)
{
double custoFixoPorPassageiro = 100.0;
return (custoFixoPorPassageiro * numeroPassageiros);
}

Professor: Cedrick Mansoni


POLIMORFÍSMO
public static void Main(string[] args)
{

Particular meuCarro = new Particular();

// Calcula o custo da viagem com base no consumo de combustível


double custoViagem1 = meuCarro.CalcularCustoViagem(17.67, 250.0, true);
Console.WriteLine($"Custo da viagem com base no consumo de combustível: Kz -
. {custoViagem1}");

// Calcula o custo da viagem com base no número de passageiros


double custoViagem2 = meuCarro.CalcularCustoViagem(4);
Console.WriteLine($"Custo da viagem com base no número de passageiros: Kz . . . .
. {custoViagem2}");

Professor: Cedrick Mansoni


T.P.C

1º Crie uma classe para representar uma pessoa, com os atributos privados
de nome, data de nascimento e altura. Crie os métodos públicos
necessários para sets e gets e também um método para imprimir todos
dados de uma pessoa. Crie um método para calcular a idade da pessoa.

Professor: Cedrick Mansoni


Professor: Cedrick Mansoni

Você também pode gostar