Orientação a Objetos - Interface

Nesta aula iremos aprender como utilizar uma interface, veremos que utilizando a interface iremos conseguir fazer coisas muito mais poderosas utilizando muito pouco código.

assinaturaAssine nossa Comunidade

POO - Interface

Interface é uma classe que possui atributos e métodos somente com a assinatura dos métodos.A implementação desta interface será feita somente nas classes que a implementar.

Para criar uma nova interface no projeto usando Visual Studio :

  1. Add -> New Class
  2. Interface
  3. O nome da Interface será IPessoa

Um exemplo de interface para gravar dados de Cliente e Usuario

      
        //Foi criado a Interface com os atributos e método Gravar() sem implementação.
        namespace Classes  
          {
            public interface IPessoa
            {
              void SetNome(string nome);
              void SetTelefone(string nome);
              void SetCPF(string nome);

              void Gravar();
              
            }            
          }
      
    

Vamos refatorar a Classe Cliente e Usuario das aulas anteriores, criando uma classe Base para inserir os atributos genéricos das Classes Cliente e Usuario.

A classe Base será responsavel por implementar a interface com o método Gravar(). Utilizamos o mesmo símbolo da herança para fazer a representação de implementação da interface, que são os dois pontos ":"

      
        // A classe Base implementa a interface IPessoa
        namespace Classes  
          {
            public class Base : IPessoa 
            {
 
              public Base(string nome, string telefone, string cpf)
              {
                this.Nome = nome;
                this.Telefone = telefone;
                this.CPF = cpf;
              }

              public Base(){}

              public string Nome;
              public string Telefone;
              public string CPF;


              public virtual void Gravar()
              {
                var dados = this.Ler();
                dados.Add(this);
                if (File.Exists(diretorio()))
                {
                  StreamWriter r = new StreamWriter(diretorioComArquivo());
                  r.WriteLine("nome;telefone;cpf");
                  foreach(Base b in dados)
                  {
                    var linha = b.Nome + ";" + b.Telefone + ";" + b.CPF + ";";
                    r.WriteLine(linha);
                  }
                  r.close;
                }
              }
            
              public string diretorioComArquivo()
              {
                return ConfigurationManager.AppSettings["CaminhoArquivo"] + this.GetType().Name + ".txt";
              }


              public static  List< IPessoa> Ler()
              {
                var dados = new List< Base>();
                if (File.Exists(diretorioComArquivo))
                {
                  using(StreamReader arquivo = File.OpenText(diretorioComArquivo()))
                  {
                    string linha;
                    int i = 0;
                    while (linha = arquivo.ReadLine()) !=null)
                    {
                      i++;
                      if (i == 1) continue;
                      var baseArquivo = linha.Split(';');

                      //Cria a instancia da Classe que estou passando (Usuario ou Cliente)
                      var b = (IPessoa)Activator.CreateInstance(this.GetType());

                      b.SetNome(baseArquivo[0]);
                      b.SetTelefone(baseArquivo[1]);
                      b.SetCPF(baseArquivo[2]);

                      dados.Add(b);
                    }
                  }
                }
              }

            }
          }

      
    

Na classe Cliente, vamos herdar da classe Base

      
        namespace Classes  
          {
            public class Cliente : Base 
            {
              public Cliente(string nome, string telefone, string cpf)
              {
                this.Nome = nome;
                this.Telefone = telefone;
                this.CPF = cpf;
              }

              public Cliente(){}
            }            
          }
      
    

Na classe Usuario, vamos também herdar da classe Base

      
        namespace Classes  
          {
            public class Usuario : Base 
            {
              public Usuario(string nome, string telefone, string cpf)
              {
                this.Nome = nome;
                this.Telefone = telefone;
                this.CPF = cpf;
              }

              public Usuario(){}
            }                
          }
      
    

No programa Principal (main) iremos criar as instância das classes Clientes e Usuarios e as duas classes utilizam o método Gravar() da classe Base, que implementou a Interface IPessoa.

      
        namespace console_app  
        {
          class Program 
          {
            static void Main(string[] args)
            {
              //grava dados no arquivo de clientes.txt
              Cliente c = new Cliente();
              c.Nome = "Cliente";
              c.Telefone = "2541";
              c.CPF = "3333";
              c.Gravar();
              foreach(Cliente cl in new Cliente().Ler())
              {
                Console.WriteLine(cl.Nome);
                Console.WriteLine(cl.Telefone);
                Console.WriteLine(cl.CPF);
              }
              
              //grava dados no arquivo de Usuarios.txt
              Usuario u = new Usuario();
              u.Nome = "Usuario";
              u.Telefone = "25555";
              u.CPF = "33666";
              u.Gravar();
              foreach(Usuario us in new Usuario().Ler())
              {
                Console.WriteLine(us.Nome);
                Console.WriteLine(us.Telefone);
                Console.WriteLine(us.CPF);
              }
            }
          }
        }
       
    

Orientação a Objetos - Interface

Nesta aula iremos aprender como utilizar uma interface, veremos que utilizando a interface iremos conseguir fazer coisas muito mais poderosas utilizando muito pouco código.

Próximas Aulas:
assinaturaAssine nossa Comunidade

POO - Interface

Interface é uma classe que possui atributos e métodos somente com a assinatura dos métodos.A implementação desta interface será feita somente nas classes que a implementar.

Para criar uma nova interface no projeto usando Visual Studio :

  1. Add -> New Class
  2. Interface
  3. O nome da Interface será IPessoa

Um exemplo de interface para gravar dados de Cliente e Usuario

      
        //Foi criado a Interface com os atributos e método Gravar() sem implementação.
        namespace Classes  
          {
            public interface IPessoa
            {
              void SetNome(string nome);
              void SetTelefone(string nome);
              void SetCPF(string nome);

              void Gravar();
              
            }            
          }
      
    

Vamos refatorar a Classe Cliente e Usuario das aulas anteriores, criando uma classe Base para inserir os atributos genéricos das Classes Cliente e Usuario.

A classe Base será responsavel por implementar a interface com o método Gravar(). Utilizamos o mesmo símbolo da herança para fazer a representação de implementação da interface, que são os dois pontos ":"

      
        // A classe Base implementa a interface IPessoa
        namespace Classes  
          {
            public class Base : IPessoa 
            {
 
              public Base(string nome, string telefone, string cpf)
              {
                this.Nome = nome;
                this.Telefone = telefone;
                this.CPF = cpf;
              }

              public Base(){}

              public string Nome;
              public string Telefone;
              public string CPF;


              public virtual void Gravar()
              {
                var dados = this.Ler();
                dados.Add(this);
                if (File.Exists(diretorio()))
                {
                  StreamWriter r = new StreamWriter(diretorioComArquivo());
                  r.WriteLine("nome;telefone;cpf");
                  foreach(Base b in dados)
                  {
                    var linha = b.Nome + ";" + b.Telefone + ";" + b.CPF + ";";
                    r.WriteLine(linha);
                  }
                  r.close;
                }
              }
            
              public string diretorioComArquivo()
              {
                return ConfigurationManager.AppSettings["CaminhoArquivo"] + this.GetType().Name + ".txt";
              }


              public static  List< IPessoa> Ler()
              {
                var dados = new List< Base>();
                if (File.Exists(diretorioComArquivo))
                {
                  using(StreamReader arquivo = File.OpenText(diretorioComArquivo()))
                  {
                    string linha;
                    int i = 0;
                    while (linha = arquivo.ReadLine()) !=null)
                    {
                      i++;
                      if (i == 1) continue;
                      var baseArquivo = linha.Split(';');

                      //Cria a instancia da Classe que estou passando (Usuario ou Cliente)
                      var b = (IPessoa)Activator.CreateInstance(this.GetType());

                      b.SetNome(baseArquivo[0]);
                      b.SetTelefone(baseArquivo[1]);
                      b.SetCPF(baseArquivo[2]);

                      dados.Add(b);
                    }
                  }
                }
              }

            }
          }

      
    

Na classe Cliente, vamos herdar da classe Base

      
        namespace Classes  
          {
            public class Cliente : Base 
            {
              public Cliente(string nome, string telefone, string cpf)
              {
                this.Nome = nome;
                this.Telefone = telefone;
                this.CPF = cpf;
              }

              public Cliente(){}
            }            
          }
      
    

Na classe Usuario, vamos também herdar da classe Base

      
        namespace Classes  
          {
            public class Usuario : Base 
            {
              public Usuario(string nome, string telefone, string cpf)
              {
                this.Nome = nome;
                this.Telefone = telefone;
                this.CPF = cpf;
              }

              public Usuario(){}
            }                
          }
      
    

No programa Principal (main) iremos criar as instância das classes Clientes e Usuarios e as duas classes utilizam o método Gravar() da classe Base, que implementou a Interface IPessoa.

      
        namespace console_app  
        {
          class Program 
          {
            static void Main(string[] args)
            {
              //grava dados no arquivo de clientes.txt
              Cliente c = new Cliente();
              c.Nome = "Cliente";
              c.Telefone = "2541";
              c.CPF = "3333";
              c.Gravar();
              foreach(Cliente cl in new Cliente().Ler())
              {
                Console.WriteLine(cl.Nome);
                Console.WriteLine(cl.Telefone);
                Console.WriteLine(cl.CPF);
              }
              
              //grava dados no arquivo de Usuarios.txt
              Usuario u = new Usuario();
              u.Nome = "Usuario";
              u.Telefone = "25555";
              u.CPF = "33666";
              u.Gravar();
              foreach(Usuario us in new Usuario().Ler())
              {
                Console.WriteLine(us.Nome);
                Console.WriteLine(us.Telefone);
                Console.WriteLine(us.CPF);
              }
            }
          }
        }