Você está na página 1de 13

COTI Informtica C# WebDeveloper

Aula de 24.03.12

Aula 02
Relacionamento entre Classes o Herana e Associao Construtores Sobrescrita e Sobrecarga de Mtodos Entrada de dados por Console Tratamento de excees Manipulao de Arquivos

using using using using

System; System.Collections.Generic; System.Linq; 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 Mtodos (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; } //Sada }

public string Nome { set { nome = value; } get { return nome; } } public double Salario { set { salario = value; } get { return salario; } } #endregion #region Sobrescrita de Mtodos public override string ToString() { return "Funcionrio: " + idFuncionario + ", " + nome + ", " + salario; } #endregion } }

Sobrescrita de Mtodos (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 using using using

System; System.Collections.Generic; System.Linq; 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 using using using

System; System.Collections.Generic; System.Linq; 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 using using using System; System.Collections.Generic; System.Linq; 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 Mtodos public override string ToString() { return idDepartamento + ", " + nome; } #endregion } }

Relacionamento de Associao (TER)


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

namespace Proj01.Model { public class Funcionario { #region Atributos private int idFuncionario; private string nome; private double salario;

private Departamento depto; //TER -> Associao


#endregion #region Construtores //Construtor default (vazio) public Funcionario() { } //Sobrecarga de Mtodos (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; } //Sada } 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 Mtodos public override string ToString() { return idFuncionario + ", " + nome + ", " + salario; } } } #endregion

using using using using

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

namespace Proj01.Model { public class Departamento { #region Atributos private int idDepartamento; private string nome;

#endregion

private List<Funcionario> funcionario; //TER -> Associao

#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 Mtodos 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 mquina do usurio.

Classe para leitura de dados


using using using using System; System.Collections.Generic; System.Linq; 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 gravao em doc


using using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.IO; //Input / Output (Entrada e Sada) 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 { //Varivel do tipo StreamWriter (API para gravao de Arquivos) StreamWriter sw = null; //varivel try //Tentativa { sw = new StreamWriter("c:\\documento.doc", true); sw.WriteLine("Id do Funcionario...: sw.WriteLine("Nome................: sw.WriteLine("Salario.............: sw.WriteLine("Linguagem...........: sw.WriteLine("Departamento........: sw.WriteLine("..."); } " " " " " + + + + + p.IdFuncionario); p.Nome); p.Salario); p.Linguagem); p.Depto);

return "Dados gravados com sucesso.";

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

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

namespace Proj01 { class Program { static void Main(string[] args) { Programador prog = new Programador(); Departamento depto = new Departamento(); Leitura leitura
prog.IdFuncionario prog.Nome prog.Salario prog.Linguagem

= new Leitura();
= = = = leitura.LerInteiro("Informe leitura.LerTexto("Informe o leitura.LerDecimal("Informe leitura.LerTexto("Informe a o Id: "); Nome: "); o Salario: "); 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 Mtodos: As operaes / funes public: visibilidade total (irrestrito) private: acesso somente dentro da propria classe (visibilidade mais restritiva) geralmente usado em atributos. Construtor: um mtodo responsavel por inicializar objetos criados para uma determinada Classe Toda Classe possui por default um construtor vazio Sobrecarga de Mtodos: Ocorre quando criamos vrios mtodos 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 definio de atributos privados e criao de mtodos publicos para manipular tais atributos Toda Classe criada em C# implicitamente herana da Classe System.Object A Classe Object prov mtodos que podem ser personalizados pelas classes que herdam Object ToString -> Retornar uma string contendo os dados do objeto (Assinatura do objeto) Equals -> Comparar dois objetos da mesma Classe GetType -> Retorna o tipo do objeto (type)

o o o

GetHashCode -> Endereo do objeto na pilha de hash (endereos do compilador) Override significa sobrescrita de mtodos, ocorre quando uma classe filha personaliza, reescreve, sobrescreve um mtodo de sua classe pai. Override somente ocorre em herana!!! Overloading -> Sobrecarga de mtodos Override -> Sobrescrita de mtodos Herana: Relacionamento entre classes abstrao do verbo SER. Em C# uma Classe filha (SubClasse) somente pode herdar de 1 nica Classe PAI. No existem em C# Herana Multipla entre Classes. O Construtor de uma Classe Filha pode invocar o Construtor da sua Classe PAI utilizando a palavra-chave 'base' Associao -> Relacionamento do tipo TER Ocorre quando uma classe possui um Atributo cujo tipo outra Classe (Relacionamento mais comum em Orientao a Objetos) Existem erros que podem ocorrer em um projeto de dois tipos: Erros de Compilao e Erros em Tempo de Execuo. 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 excees Exception uma das Classes que capturam informaes sobre o erro gerado