Aula_24.03.12

Post on 24-Oct-2014

7 views 0 download

Tags:

Transcript of Aula_24.03.12

COTI Informática – C# WebDeveloperAula de 24.03.12

Aula 02

Relacionamento entre Classeso Herança e Associação

Construtores Sobrescrita e Sobrecarga de Métodos Entrada de dados por Console Tratamento de exceções Manipulação de Arquivos

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Model{ public class Funcionario { #region Atributos

private int idFuncionario; private string nome; private double salario;

#endregion #region Construtores

//Construtor default (vazio) public Funcionario() {

}

//Sobrecarga de Métodos (Overloading) public Funcionario(int idFuncionario, string nome, double salario) { this.idFuncionario = idFuncionario; this.nome = nome; this.salario = salario; }

#endregion

#region Encapsulamento

public int IdFuncionario { set { idFuncionario = value; } //Entrada get { return idFuncionario; } //Saída }

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

public double Salario { set { salario = value; } get { return salario; } }

#endregion

#region Sobrescrita de Métodos

public override string ToString() { return "Funcionário: " + idFuncionario + ", " + nome

+ ", " + salario; }

#endregion }}

Sobrescrita de Métodos (exemplo)

public class A { public virtual int Calculo(int a, int b) { return a + b; } }

public class B : A { public override int Calculo(int a, int b) { return a * b; } }

public class Teste { public void Executar() { B b = new B(); int resultado = b.Calculo(10, 20); } }

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Model{ public class Analista : Funcionario { private string tipo;

public Analista() { //Construtor default }

public Analista(int idFuncionario, string nome, double salario, string tipo)

: base(idFuncionario, nome, salario) { this.tipo = tipo; }

public string Tipo { get { return tipo; } set { tipo = value; } }

public override string ToString() { return base.ToString() + ", " + tipo; } }}

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Model{ public class Programador : Funcionario { private string linguagem;

public Programador() { //Construtor default }

public Programador(int idFuncionario, string nome, double salario, string linguagem)

: base(idFuncionario, nome, salario) { this.linguagem = linguagem; }

public string Linguagem { get { return linguagem; } set { linguagem = value; } }

public override string ToString() { return base.ToString() + ", " + linguagem; } }}

Classe Departamento

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Model{ public class Departamento { #region Atributos

private int idDepartamento; private string nome;

#endregion

#region Construtores

public Departamento() {

}

public Departamento(int idDepartamento, string nome) { this.idDepartamento = idDepartamento; this.nome = nome; }

#endregion

#region Encapsulamento

public int IdDepartamento { set { idDepartamento = value; } get { return idDepartamento; } }

public string Nome { set { nome = value; } get { return nome; } } #endregion

#region Sobrescrita de Métodos

public override string ToString() { return idDepartamento + ", " + nome; }

#endregion }}

Relacionamento de Associação (TER)

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Model{ public class Funcionario { #region Atributos

private int idFuncionario; private string nome; private double salario;

private Departamento depto; //TER -> Associação

#endregion #region Construtores

//Construtor default (vazio) public Funcionario() {

}

//Sobrecarga de Métodos (Overloading) public Funcionario(int idFuncionario, string nome, double salario) { this.idFuncionario = idFuncionario; this.nome = nome; this.salario = salario; }

#endregion

#region Encapsulamento

public int IdFuncionario { set { idFuncionario = value; } //Entrada get { return idFuncionario; } //Saída }

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

public double Salario { set { salario = value; } get { return salario; } }

public Departamento Depto { get { return depto; } set { depto = value; } }

#endregion

#region Sobrescrita de Métodos

public override string ToString() { return idFuncionario + ", " + nome + ", " + salario; }

#endregion }}

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Model{ public class Departamento { #region Atributos

private int idDepartamento; private string nome;

private List<Funcionario> funcionario; //TER -> Associação

#endregion

#region Construtores

public Departamento() {

}

public Departamento(int idDepartamento, string nome) { this.idDepartamento = idDepartamento; this.nome = nome; }

#endregion

#region Encapsulamento

public int IdDepartamento { set { idDepartamento = value; } get { return idDepartamento; } }

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

public List<Funcionario> Funcionario { get { return funcionario; } set { funcionario = value; } }

#endregion

#region Sobrescrita de Métodos

public override string ToString() { return idDepartamento + ", " + nome; }

#endregion }}

Requisito:

Programa que leia os dados de um Programador (idFuncionario, nome, salario, linguagem e departamento) e grave estes dados em arquivo doc na máquina do usuário.

Classe para leitura de dados

using System;using System.Collections.Generic;using System.Linq;using System.Text;

namespace Proj01.Input{ public class Leitura { public int LerInteiro(string mensagem) { Console.Write(mensagem); return Convert.ToInt32(Console.ReadLine()); }

public string LerTexto(string mensagem) { Console.Write(mensagem); return Console.ReadLine(); }

public double LerDecimal(string mensagem) { Console.Write(mensagem); return Convert.ToDouble(Console.ReadLine()); } }}

Classe para gravação em doc

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO; //Input / Output (Entrada e Saída)using Proj01.Model;

namespace Proj01.Control{ public class Controle { //Rotina para gravar os dados de um Programador em um arquivo .doc public string GravarDadosProgramador(Programador p)

//Value Object -> VO {

//Variável do tipo StreamWriter (API para gravação de Arquivos)

StreamWriter sw = null; //variável

try //Tentativa { sw = new StreamWriter("c:\\documento.doc", true);

sw.WriteLine("Id do Funcionario...: " + p.IdFuncionario); sw.WriteLine("Nome................: " + p.Nome); sw.WriteLine("Salario.............: " + p.Salario); sw.WriteLine("Linguagem...........: " + p.Linguagem); sw.WriteLine("Departamento........: " + p.Depto); sw.WriteLine("...");

return "Dados gravados com sucesso."; }

catch (Exception e) //Captura do erro { return "Erro: " + e.Message; } finally //finalizador { sw.Close(); //Fechar o Arquivo } } }}

Executando...

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Proj01.Model;using Proj01.Input;using Proj01.Control;

namespace Proj01{ class Program { static void Main(string[] args) { Programador prog = new Programador(); Departamento depto = new Departamento();

Leitura leitura = new Leitura();

prog.IdFuncionario = leitura.LerInteiro("Informe o Id: "); prog.Nome = leitura.LerTexto("Informe o Nome: "); prog.Salario = leitura.LerDecimal("Informe o Salario: "); prog.Linguagem = leitura.LerTexto("Informe a Linguagem");

depto.IdDepartamento = leitura.LerInteiro("Id do Departamento: "); depto.Nome = leitura.LerTexto("Nome do Departamento: "); //Associar o Programador ao seu Departamento prog.Depto = depto;

//Gravar em Arquivo Controle c = new Controle(); Console.WriteLine(c.GravarDadosProgramador(prog));

Console.ReadKey(); } }}

Notas de Aula

Atributos: dados pertencentes à Classe

Métodos: As operações / funções

public: visibilidade total (irrestrito)

private: acesso somente dentro da propria classe (visibilidade mais restritiva) geralmente é usado em atributos.

Construtor: É um método responsavel por inicializar objetos criados para uma determinada Classe

Toda Classe possui por default um construtor vazio

Sobrecarga de Métodos: Ocorre quando criamos vários métodos com o mesmo nome na mesma Classe sendo que com entrada de dados diferentes.

Encapsulamento significa proteger o conteudo de uma Classe do acesso externo -> Por exemplo, pode ser feito pela definição de atributos privados e criação de métodos publicos para manipular tais atributos

Toda Classe criada em C# é implicitamente herança da Classe System.Object

A Classe Object provê métodos que podem ser personalizados pelas classes que herdam Object

o ToString -> Retornar uma string contendo os dados do objeto (Assinatura do objeto)

o Equals -> Comparar dois objetos da mesma Classe

o GetType -> Retorna o tipo do objeto (type)

o GetHashCode -> Endereço do objeto na pilha de hash (endereços do compilador)

Override significa sobrescrita de métodos, ocorre quando uma classe filha personaliza, reescreve, sobrescreve um método de sua classe pai.

Override somente ocorre em herança!!!

Overloading -> Sobrecarga de métodos

Override -> Sobrescrita de métodos

Herança: Relacionamento entre classes abstração do verbo SER. Em C# uma Classe filha (SubClasse) somente pode herdar de 1 ùnica Classe PAI. Não existem em C# Herança Multipla entre Classes.

O Construtor de uma Classe Filha pode invocar o Construtor da sua Classe PAI utilizando a palavra-chave 'base'

Associação -> Relacionamento do tipo TER Ocorre quando uma classe possui um Atributo cujo tipo é outra Classe (Relacionamento mais comum em Orientação a Objetos)

Existem erros que podem ocorrer em um projeto de dois

tipos: Erros de Compilação e Erros em Tempo de Execução.

Value Object significa passagem de objetos por parametro, ou seja, passar toda a estrutura de um objetivo ao inves de transportar cada dado isoladamente

Try/Catch bloco para tratamento de exceções

Exception é uma das Classes que capturam informações sobre o erro gerado