Aula_24.03.12

16
COTI Informática – C# WebDeveloper Aula de 24.03.12 Aula 02 Relacionamento entre Classes o 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

Transcript of Aula_24.03.12

Page 1: 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

Page 2: Aula_24.03.12

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 }

Page 3: Aula_24.03.12

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); } }

Page 4: Aula_24.03.12

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; } }}

Page 5: Aula_24.03.12

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 }}

Page 6: Aula_24.03.12

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; } }

Page 7: Aula_24.03.12

#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; } }

Page 8: Aula_24.03.12

#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.

Page 9: Aula_24.03.12

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."; }

Page 10: Aula_24.03.12

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(); } }}

Page 11: Aula_24.03.12

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)

Page 12: Aula_24.03.12

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

Page 13: Aula_24.03.12