Início » C# » Conceitos Básicos de POO (Programação Orientada a Objetos) para C# – Parte 1

Conceitos Básicos de POO (Programação Orientada a Objetos) para C# – Parte 1

Olá. Primeiramente, quero dizer que resolvi postar esse artigo sobre conceitos básicos de POO aplicados em C# pela sua grande importância. Quem realmente está disposto a aprender programas em C# não pode simplesmente começar a trabalhar com linhas de código sem saber o que está usando nas mesmas. Sabe-se que a linguagem de programação C# é orientada a objetos e, sendo assim, é importante saber o que são classes, métodos, construtores dentre vários outros nomes e conceitos que teremos dentro da POO. Sendo assim, bons estudos!

  • O que são classes?

– Tipos mais importantes do C#.
– É uma estrutura de dados que combina estado (campos) e comportamentos (métodos e outros membros).
– Fornecem a definição da estrutura das instâncias que serão criadas dinamicamente, os objetos.
– Suportam os mecanismos de herança e polimorfismo, que permitem uma classe derivada estender e especializar uma classe base.
– A declaração de uma classe especifica os atributos e modificadores da classe, o nome da classe, a classe base (se herdar de alguma) e as interfaces implementadas (se existir).
– Instâncias da classe, objetos, são criadas usando o operador “new”.
– A criação de uma instância aloca memória para o objeto criado, invoca o construtor para inicializar o objeto e retorna a referência para a instância.
– O objeto alocado, quando não mais referenciado, será limpado da memória pelo objeto Garbage Collector.
– Tem-se: constantes, campos, métodos, propriedades, indexadores, eventos, operadores, construtores, destrutores e tipos.

Constantes: os valores constantes que são associados a classe.
Campos: as variáveis da classe.
Métodos: executados pela classe.
Propriedades: as ações para leitura e escrita de propriedades.
Indexadores: as ações associadas com instâncias indexadas da classe da mesma forma que um array.
Eventos: as notificações que podem ser geradas pela classe.
Operadores: os operadores de conversão e expressão suportados pela classe.
Construtores: as ações necessárias para inicializar as instâncias da classe ou ela mesma.
Destrutores: as ações executadas antes das instâncias da classe serem removidas.
Tipos: classes declaradas dentro de outra classe.

  • O que são objetos?

– Representa uma instância de uma classe.
– Identidade: todo objeto é único e pode ser distinguido de outros objetos.
– Estado: determinado pelos dados contidos no objeto.
– Comportamentos: representados pelos serviços / métodos / operações que o objeto disponibiliza.
– Representa alguma coisa do mundo real. Exemplo: aluno, cliente, computador, carro.

  • O que são construtores?

– Instância, privado e estático.
– Construtores de instância são utilizados para criar e inicializar instâncias de uma classe.
– O construtor sem parâmetros é o construtor padrão.
– Se a classe não define um construtor, o construtor padrão é gerado automaticamente e os campos são inicializados com valores padrão.
– É declarado da mesma forma que um método, exceto que não tem tipo de retorno (e nem void) e deve ter o mesmo nome da classe.
– Construtores de instância podem ser sobrecarregados e são invocados com o operador new.
– Construtores da classe derivada podem ser chamados pela classe base.

  • O que são interfaces?

– Define um contrato que pode ser implementado pelas classes e structs.
– Pode conter métodos, propriedades, eventos e indexadores.
– Não fornece implementação para os membros definidos.
– Basicamente, define os membros que devem ser implementados pelas classes e structs que a implementam.
– Classes e structs podem implementar mais de uma interface.
– Quando uma classe ou struct implementa uma interface, instâncias da classe ou struct podem ser implicitamente convertidas para o tipo da interface.

  • Visibilidade dos membros

– Cada membro da classe tem uma visibilidade associada e ele, que controla as áreas de código que podem acessá-lo.

Public: acesso ilimitado
Protected: acesso limitado ao this e as classes derivadas.
Internal: acesso limitado ao assembly.
Protected internal: acesso limitado ao assembly e as classes derivadas.
Private: acesso limitado a classe.

  • O que são métodos?

– É um membro da classe que implementa uma ação que pode ser executada por um objeto ou pela classe.
– Métodos estáticos são acessados através da classe.
– Métodos de instância (não estáticos) são acessados através das instâncias da classe.
– Pode ter uma lista de parâmetros, que representa os valores ou referências de variáveis que são passadas para o método; e um tipo de retorno, que indica o que é retornado pelo método.
– O método que tem como tipo de retorno void, indica que não retorna um valor.
– A assinatura do método deve ser única na classe, e é formada pelo nome e número, modificadores e tipos dos parâmetros.

  • Métodos: parâmetros

– São usados para passar valores ou variáveis por referência para os métodos.
– Os parâmetros obtém seus valores dos argumentos que são passados para os métodos no momento da execução.
– Existem 4 tipos de parâmetros: por valor, por referência, de saída e arrays.

  • Métodos: sobrecarga

– Permite que métodos numa mesma classe tenham o mesmo nome mas assinaturas diferentes.
– Quando sobrecarregados, os métodos são localizados pelo compilador de acordo com a sua lista de parâmetros.
– Um método específico pode ser selecionado através da conversão dos parâmetros esperados.

  • O que são propriedades?

– Representam uma extensão dos campos. A propriedade tem o mesmo tipo de campo, e a sintaxe para acessá-la é a mesma do campo.
– Diferentemente dos campos, as propriedades não representam um local de armazenamento, e têm comando específico para leitura (get) e escrita (set).
– Declaradas da mesma forma que um campo, exceto que a declaração termina com get e/ou set.
– C# suporta propriedades com instância (sem static) e propriedades estáticas (com static).
– Podem ser declaradas com virtual, abstract ou override.

  • O que são enum e struct?

– Enum
-> Define uma lista de constantes nomeadas.
-> Pode ser definido como qualquer tipo integral, exceção char. O tipo padrão é o int.
– Struct
-> Uma struct compartilha quase todas as mesmas características de uma classe, mas com algumas restrições.
-> Objetos do tipo struct são destruídos automaticamente pelo compilador, até porque é um Tipo por Valor.
-> Structs não podem herdar de outra classe ou outra struct.

  • O que é um namespace?

– É um mecanismo que permite declarar um escopo, onde você organiza os tipos e declara tipos únicos.
– São declarados: outro namespace, class, interface, struct, enum e delegate.
– O nome de um namespace pode ser qualquer identificador e conter . no nome.
– Mesmo se não for declarado um namespace, um padrão será criado.
– É possível declarar um ou mais namespaces numa mesma declaração.

Manipulando vários objetos

  • O que são arrays?

– É uma seqüência de elementos.
– Todos os elementos são do mesmo tipo.
– Structs podem ter elementos de tipos diferentes.
– Cada elemento do array é acesso através de um número inteiro que representa o índice.

  • Arrays: dimensões

long [] linha;
– Uma dimensão. Um índice associado a cada elemento long do array.

int [,] matriz;
– Duas dimensões. Dois índices associados a cada elemento int.

  • Arrays: criação e inicialização

– A declaração da variável array não cria o array.
– Você deve usar o operador new para criar a instância do array.

long [] linha = new long [4];
int [,] matriz = new int [2,3];

//Listando array com duas dimensões
public static void ArrayMultiDim() {
//Declara e inicializa um array de duas dimensões
int [,] arrayMulti = new int [,] {{1,2}, {3,4}, {5,6}, {7,8}};
//Navegando por todos os elementos usando for
Console.WriteLine(“\nListando um array de duas dimensões”);
       for (int i=0;i<arrayMulti.GetLength(0);i++) {
            for (int j=0;j<arrayMulti.GetLength(1);j++) {
                 Console.Write(“{0}”, arrayMulti[i,j]);
                 }
            Console.WriteLine();
            }
}
  • O que são coleções?

– São classes especializadas para armazenamento e busca de objetos, com suporte a listas, filas, pilhas e tabelas hash.
– Permitem manipular vários objetos ao mesmo tempo, com métodos para adicionar, remover, modificar um elemento ou um intervalo.
– São definidas nos namespaces System.Collections e System.Collections.Generic.
– Coleções genéricas sao fortemente tipadas e melhoram a performance com tipos por valor.

  • Coleções genéricas

– São classes e métodos que combinam reusabilidade, tipagem forte e eficiência que não são oferecidos pelas coleções não genéricas.
– Suportam tipos por valor sem a necessidade de boxing e unboxing.
– Algumas coleções genéricas:
List : a classe genérica que corresponde a ArrayList.
Dictionary : corresponde a HashTable.
Collection : corresponde a CollectionBase.
Queue , Stack e SortedList : correspondem as não genéricas de mesmo nome.
LinkedList , SortedDictionary e KeyedCollection .

Delegates e eventos

  • O que são delegates?

– Representa uma referência para métodos com uma lista de parâmetros e retorno específicos.
– Permite tratar métodos como entidades que podem ser atribuídas a uma variável ou passadas como parâmetros.
– É um conceito similar ao conceito de ponteiro de função em algumas linguagens, mas diferem porque são OO e tipados.
– Para o delegate só importa o método que ele referencia, e não a classe.

  • O que são eventos?

– É um membro que permite uma classe ou objeto fornecer notificações.
– É declarado da mesma forma que um campo, exceto que deve ter event na declaração e ser do tipo delegate.
– O campo do tipo evento armazena uma referência a um delegate que representa o manipulador do evento (event handler) que foi adicionado. Se não existir, o campo é null.
– Event handlers são atachados usando o operador += e removidos usando ==.
– O objeto que tem o evento (publicador) lança um evento, ou seja, uma mensagem aos objetos interessados (assinantes).

O conteúdo foi reproduzido do MSDN.

Andrielle Azevedo de Paula
MTAC – Microsoft Technical Audience Contributor


5 Comentários

  1. Perfeito Dri! Tem alguns conceitos que eu não conhecia da época que estudava C#, e vários outros se aplicam nas demais linguagens orientada a objetos.
    Com um post tão completo como este, nem parece que tem parte 2. Fico no aguardo da 2ª parte =)

  2. Está me ajudando mto na minha facu de jogos digitais😉

  3. socketdual disse:

    muito bom.

Deixe uma resposta

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: