Resumo
Resumo
A POO é uma abordagem de programação que organiza o código ao redor de "objetos", que
podem ser pensados como unidades autocontidas que contêm dados (atributos) e as
operações (métodos) que podem ser realizadas nesses dados.
Os pilares da Programação Orientada a Objetos (POO) são quatro conceitos fundamentais que
guiam a estruturação e design de programas. Eles são:
Encapsulamento:
Definição: É o conceito de agrupar dados (atributos) e os métodos que operam nesses dados
em uma única unidade, chamada de classe.
Herança:
Definição: Permite que uma classe herde características (atributos e métodos) de outra classe,
estabelecendo uma relação de "pai e filho" entre elas.
Polimorfismo:
Definição: Permite que um objeto possa ser tratado de várias formas, dependendo do
contexto. Pode ocorrer de duas formas: polimorfismo de sobrecarga (mesmo nome, diferentes
parâmetros) e polimorfismo de sobreposição (métodos com mesmo nome e parâmetros na
classe base e nas classes derivadas).
Objeto: Um objeto é uma instância única de uma classe. Pode ser uma representação
do mundo real ou um conceito abstrato.
Classe: Uma classe é um modelo ou plano para criar objetos. Define atributos (dados) e
métodos (ações) que os objetos dessa classe terão.
Atributos: Atributos são características dos objetos, também conhecidos como
propriedades. Por exemplo, em uma classe "Carro", os atributos podem ser "Cor",
"Modelo", "Ano".
Métodos: Métodos são ações que os objetos podem realizar. Se a classe é "Carro", os
métodos podem ser "Ligar", "Desligar", "Acelerar".
Encapsulamento: É o conceito de agrupar dados (atributos) e os métodos que operam
nesses dados em uma única unidade (objeto). Ajuda a proteger os dados, controlando
o acesso a eles.
Herança: Permite que uma classe herde características e comportamentos de outra
classe. Exemplo: uma classe "Veículo" pode ter características gerais, e as classes
"Carro" e "Moto" podem herdar dela.
Polimorfismo: Significa que objetos de diferentes classes podem ser tratados como
objetos de uma classe comum. Permite flexibilidade e extensibilidade do código.
Classes Abstratas:
Uma classe abstrata é como um modelo de classe que não pode ser instanciado diretamente.
Em vez disso, ela serve como um ponto de partida para outras classes. O propósito principal é
fornecer uma estrutura comum e compartilhar comportamentos entre diferentes classes.
Por exemplo, imagine uma classe abstrata chamada Animal. Essa classe pode conter métodos
abstratos, que são métodos sem implementação. As classes que herdam de Animal precisam
fornecer suas próprias implementações para esses métodos abstratos. Isso ajuda a garantir que
todas as classes derivadas compartilhem alguns comportamentos essenciais, enquanto ainda
podem ter métodos específicos próprios.
Interfaces:
As interfaces em C# são como contratos que especificam um conjunto de métodos que uma
classe deve implementar. Elas são utilizadas para definir um comportamento comum que pode
ser compartilhado por diferentes classes, independentemente de sua hierarquia.
Vamos pensar em uma interface chamada ISonoro, que define um método FazerSom.
Diferentes classes podem implementar essa interface, garantindo que todas elas tenham a
capacidade de fazer algum tipo de som.
Modificadores de Acesso:
1. public:
2. private:
3. protected:
C# é uma linguagem onde os tipos de dados são explicitamente definidos (ou seja, tipada.
Exemplo: int numero = 5; indica que a variável numero é do tipo inteiro), o código é
transformado em código de máquina antes de ser executado (compilada), e possui um
ambiente de execução que gerencia automaticamente a alocação de recursos (gerenciada),
ajudando a prevenir erros relacionados à manipulação direta de memória.
Os Built-in types (tipos primitivos) no C# são tipos de dados fundamentais que já estão
incorporados na linguagem. São tipos simples que representam valores básicos. Alguns
exemplos desses tipos primitivos incluem:
int: Números inteiros.
double: Números de ponto flutuante.
char: Caracteres individuais.
bool: Valores lógicos (verdadeiro ou falso).
string: Sequências de caracteres.
Esses tipos primitivos fornecem a base para a manipulação de dados em C# e são utilizados
para armazenar informações simples em programas.
Exemplo:
Imagine que você tem duas classes diferentes em seu programa, e ambas têm um método
chamado "Processar". Sem namespaces, poderia haver confusão sobre qual "Processar" você
está chamando. Um namespace resolve isso, fornecendo um contexto para os nomes.
O que é um construtor?
Inicialização de Objetos: Um construtor permite que você forneça valores iniciais para os
membros da classe quando um objeto é instanciado.
Sintaxe: Em C#, o construtor tem o mesmo nome da classe e não possui um tipo de retorno.
Você pode ter vários construtores na mesma classe, desde que tenham listas de parâmetros
diferentes (sobrecarga de construtores).