Posts com a Tag ‘Classes’

Sexta .NET – Aula 11 – ASP.NET e C# – Parte II

domingo, 22 de agosto de 2010

Boa tarde Pessoal,

Primeiramente gostaria de justificar o fato de estarmos publicando com atraso a aula, esta semana estávamos em finalização e aprovação de dois projetos, o que fez que ficassemos totalmente focados na entrega das demandas e tivessemos que abrir mão das aulas.

Para tirar o atraso, aqui vamos com a continuação da última aula.

Sexta .NET – Aula 11 – ASP.NET e C# – Parte II

Nesta aula abordaremos:
Partial Types

Aqui vamos então:

  • Recurso da versão 2.0
  • Permite dividir a implementação de um determinado tipo em diversos arquivos.
  • Disponível para classes, estruturas e interfaces.
  • Definidos pela palavra-chave partial.

Quando podem ser utilizados:
Quando trabalhamos com código gerado automaticamente, código pode ser adicionado à classe sem ter que recriar o arquivo fonte.
Partial Types permitem que dois ou mais desenvolvedores trabalhem no mesmo tipo, enquanto ambos têm seus arquivos checados para edição, sem interferir um no outro.

Declarando uma classe parcial

ClienteP1.cs

public partial class Cliente
{
public int codigo;
public bool EClienteEspecial() { … }
}

ClienteP2.cs

public partial class Cliente
{
int produtosAdquiridos;
public int ProdutosAdquiridos {
get { … }
set { … }
}
}

Declarando uma classe parcial agrupada em uma classe

ClienteP1.cs

public partial class Cliente {
int produtosAdquiridos;
public partial class ClientesEspeciais {
static List lista = new List();
}
}

ClienteP2.cs

public partial class Cliente {
public partial class ClientesEspeciais {
public void Adiciona(Cliente c) {
if (c.EClienteEspecial)
ClientesEspeciais.lista.Add(c);
}
}
}

As partes de uma classe não podem definir aspectos contraditórios.
Uma classe (ou estrutura) pode ter dois tipos de aspectos ou qualidades: acumulativa e não-acumulativa.
Os aspectos acumulativos são aspectos que cada parte do tipo parcial pode escolher adicionar, como derivação de interfaces, propriedades, índices, métodos e variáveis.
Os aspectos não-acumulativos são aspectos que todas as partes do tipo parcial devem possuir.

Classes Acumulativas

public partial class Computador {} // CompP1.cs
public partial class Computador : IProduto {// CompP2.cs
public void Adiciona() {...}
public void Remove() {...}
}

Classes Não-Acumulativas

public class Pessoa {}
public class Funcionario {}
public partial class Vendedor : Pessoa {} // VendedorP1.cs
public partial class Vendedor : Pessoa {} // VendedorP2.cs
//Não compila
public partial class Vendedor : Funcionario {}

Todas as partes devem ter a mesma acessibilidade.
Além de todas as partes definirem as mesmas partes não-acumulativas, apenas uma parte pode fazer o override de um método virtual ou abstract, e apenas uma parte pode implementar uma mesma interface.
Ao usar Partial Types, é recomendável indicar no nome do arquivo que este contém partes de um tipo. Como por exemplo: MinhaClasseP1.cs, MinhaClasseP2.cs

Bom pessoal, esta aula fica por aqui, já acompanhem a sequencia com a tal aula perdida, englobando Nullable Types

Até lá!

Sexta .NET – Aula 6 – Orientação a Objeto – Parte II

sexta-feira, 9 de julho de 2010

Boa noite pessoal,

Continuando nossa aula seguindo o tema iniciado semana passada aqui vamos.

Sexta .NET – Aula 6 – Orientação a Objeto – Parte II

Para dar sequencia ao conteúdo, falaremos hoje sobre Herança e Encapsulamento de dados.

Herança

A herança está relacionada às hierarquias e às relações entre os objetos.
É o mecanismo em que uma classe filha compartilha automaticamente todos os métodos e atributos de sua classe pai.
A herança permite implementar classes descendentes implementando os métodos e atributos que se diferenciam da classe pai.

Tipos de Herança

Simples
Quando uma classe herda as propriedades de uma única classe pai.

Múltipla
Ocorre quando uma classe tem mais de um pai.

Criando uma classe derivada

public class Pessoa
{
public string nome;
protected int id;

public void Cadastrar() { /* rotina para cadastrar */ }
}
public class Cliente : Pessoa
{
public void Comprar(int idProduto) { /* ação */ }
}
...
Cliente proximoCliente = new Cliente(“Rodrigo”);

proximoCliente.Cadastrar();
proximoCliente.Comprar(100);

Invocando um construtor da classe base na classe derivada

public class Pessoa
{
public Pessoa(string nome)
{ Console.WriteLine(“Construindo Pessoa de Nome {0}”,nome); }
}
public class Cliente : Pessoa
{
public Cliente(string nome) : base(nome)
{ Console.WriteLine(“Construindo Cliente”); }
}
...
Cliente proximoCliente = new Cliente(“Rodrigo”);
...
Construindo Pessoa de Nome Rodrigo
Construindo Cliente

Classes Seladas – são classes que não podem ser extendidas ou sobrescritas, ou seja, não podemos ter classes derivadas de classes seladas.

public sealed class Pessoa
{
// Membros da Classe Pessoa
}

Em C#, as seguintes palavras-chave são úteis para explorar o conceito de herança:

Polimorfismo

Polimorfismo significa: “Muitas Formas” e representa o fato de uma determinada característica ser diferente para cada filho.

Partimos de um objeto mais simples e que vai evoluindo. Os conceitos do objeto pai continuam a existir, mesmo que tenham sofrido modificações ou assumido novas formas.

Utilizando métodos virtuais

public class Pessoa {
public virtual void Viajar() {
/* Ação */ }
}
public class Diretor : Pessoa {
public override void Viajar() {
base.Viajar();
/* Ações Particulares da Classe Diretor */
}
}
public class Vendedor : Pessoa {
public override void Viajar() {
base.Viajar();
/* Ações Particulares da Classe Vendedor */
}
}

Encapsulamento

Encapsulamento é o ato de esconder do usuário informações que não são de seu interesse.
O objeto atua como uma caixa preta, que realiza determinadas operações mas o usuário não sabe e não precisa saber exatamente como.
Basicamente o encapsulamento separa os elementos visíveis de um objeto dos invisíveis.

Modificadores de Classes

  • Public: permite que a classe seja acessada por qualquer assembly.
  • Sealed: não permite que a classe seja herdada.
  • Partial: permite que a classe tenha seu escopo dividido em dois arquivos.
  • Static: especifica que a classe somente tem membros estáticos. Não pode ser instanciada.
  • Abstract: define moldes para classes filhas. Não pode ser instanciada.

Modificadores de membros

  • Public: permite que os membros das classes sejam acessados por qualquer outro escopo.
  • Private: acesso restrito ao escopo da classe.
  • Protected: acesso restrito a classe e as derivadas.
  • Internal: permite acesso somente por classes do mesmo assembly.
  • Static: permite acesso, sem necessidade do objeto ser instanciado.
  • Abstract: são métodos de classes Abstract que não possuem implementação.
  • Virtual: permite que os métodos sejam sobrescritos por classes filhas.
  • Readonly: limita acesso a somente leitura aos atributos da classe.

Propriedades

São métodos que protegem acesso aos membros da classe

public string Nome
{
get { return nomeCliente; }
set { nomeCliente = value; }
}

string nomeCliente = novoCliente.Nome;
novoCliente.Nome = “Steve Ballmer”;

Bom pessoal, ficamos por aqui.
Espero que verifiquem atenciosamente este material e o de semana passada pois são fundamentais para que possamos ser desenvolvedores conscientes e possuir um diferencial de mercado.

Aguardo vocês aqui para semana que vem, estaremos abordando mais sobre orientação a objeto.

Teremos Orientação a objeto – Parte III onde falaremos sobre:
Membros de Classe
Classes Abstratas
Interfaces

Até lá!

Att,
Victor Santos

Sexta .NET – Aula 5 – Orientação a Objeto – Parte I

sábado, 3 de julho de 2010

Bom dia Pessoal, primeiramente gostaria de pedir desculpas pelo atraso no lançamento desta aula.
Ontem tive alguns probleminhas após as 18:00 e não foi possível entrar no sistema.

Mas salvo o atraso, o que nos importa é não ficar sem conteúdo, aqui vamos então!

Tópico abordado: Orientação a Objeto – Parte I

Conceitos de Orientação a Objeto

Estruturada X Orientada a Objeto

Benefícios da Orientação a Objeto

Classe

É um conjunto de códigos de programação que incluem a definição dos atributos e dos métodos necessários para a criação de um ou mais objetos.

Contém toda a descrição da forma do objeto, é um molde para a criação do objeto, é uma matriz geradora de objetos, é a fábrica de objetos.

Uma classe também é um tipo definido pelo usuário.

Objeto ou Instância

Tem determinadas propriedades que o caracterizam e que são armazenadas no próprio objeto. As propriedades de um objeto são chamadas ainda de atributos.
O objeto interage com o meio e em função de excitações que sofre, realiza determinadas ações que alteram o seu estado (atributos).
Um objeto é uma entidade única que reúne atributos e métodos, ou seja, reúne as propriedades do objeto e as reações aos estímulos que sofre.

Classes e Objetos

Declaração de Classes e Objetos

Declarando uma Classe:

class Pessoa
{
string nome;
void Andar() { }
}

Declarando um Objeto:

Endereco objEndereco = new Endereco();

Atributos e Métodos

Atributos
Atributos de Classe
Quando um atributo é dividido entre todos os objetos criados, ele é armazenado na classe.
EX: Um contador de relógios criados.

Atributos de Objeto
Quando um atributo é individual ele é armazenado no objeto.
EX: A hora de um relógio.

string nome = “Bill”;
int idade = 53;

Métodos

As ações ou comportamento dos objetos são chamados, na orientação a objeto, de métodos, assim, um método é uma função, um serviço fornecido pelo objeto.
Os comportamentos do objeto são definidos na classe através dos métodos e servem para manipular e alterar os atributos do objeto.
Em um programa orientado a objeto, as excitações são representadas por mensagens que são enviadas a um objeto. Uma mensagem pode ser gerada pelo usuário, por exemplo, ao clicar o mouse.

Um método é um comando que representa uma ação

class Cliente {
private int produtosAdquiridos;
public bool EClienteEspecial() {
if (produtosAdquiridos < 250)
return false;
return true;
}
public void ComprarEspecial() { /* AÇÃO */ }
}
...
Cliente proximoCliente = new Cliente();
bool clienteEspecial = proximoCliente.EClienteEspecial();
if (clienteEspecial)
proximoCliente.ComprarEspecial();

Passando parâmetros por valor

class Cliente {
private int produtosAdquiridos;

public void DefineProdutosAdquiridos(int quantidade)
{
produtosAdquiridos = quantidade;
}
}
...
Cliente novoCliente = new Cliente();
int produtos = 255;

novoCliente.DefineProdutosAdquiridos(produtos);
//OR
novoCliente.DefineProdutosAdquiridos(200);

Passando parâmetros por referência (usando ref)

public void RetornaEndereco(ref int numero, ref string rua)
{
numero = this.numero;
rua = this.rua;
}

int numeroLocal = 0;
string ruaLocal = “”;

novoCliente.RetornaEndereco(ref numeroLocal, ref ruaLocal);

// numeroLocal e ruaLocal recebem novos valores

Passando parâmetros por referência (usando out)

public void RetornaEndereco(out int numero, out string rua)
{
numero = this.numero;
rua = this.rua;
}

int numeroLocal;
string ruaLocal;

novoCliente.RetornaEndereco(out numeroLocal, out ruaLocal);

// numeroLocal e ruaLocal são inicializados

Métodos - Sobrecarga

Utilizando sobrecarga de métodos

public void DefineProdutosAdquiridos(int novoNumero)
{
this.produtosAdquiridos = novoNumero;
}
public void DefineProdutosAdquiridos(int novoNumero, bool clienteModificado)
{
if (clienteModificado)
this.produtosAdquiridos = novoNumero;
}
public void DefineProdutosAdquiridos()
{
this.produtosAdquiridos = RecuperaProdutos(this.ClienteID);
}

Construtores

Construtores são métodos especiais responsáveis pela implementação de ações necessárias para a existência de um objeto

public class Cliente
{
public int produtosAdquiridos;
public readonly bool clienteEspecial;

//Construtor default
public Cliente()
{
if (this.produtosAdquiridos > 250)
this.clienteEspecial = true;
else
this.clienteEspecial = false;
}
}

Bom pessoal, o conteúdo de hoje é muito complexo e necessita que tenha bastante cuidado, pois o bom entendimento da orientação a objeto é fundamental para que possamos ser bons desenvolvedores .NET.
Vou parando o conteúdo neste tópico e retornaremos na próxima sexta-feira com o Tópico Herança e Polimorfismo que complementa este conteúdo de hoje.

Mais uma vez peço desculpas pelo atraso na publicação.

Att,
Victor Santos