Fala Radizeiros e Radizeiras, tudo bem com vocês?
Vamos a mais um post aqui em nosso blog, aqui neste post estarei falando sobre as classes aninhadas.
Você já ouviu falar sobre isso?
Pouca gente sabe desse detalhe dentro do Delphi, e menos gente usa isso dai…rsrs
Isso é pouco usado, mas vale ressaltar, que em algum momento isso pode ser útil.
Mas o que são classes aninhadas?
São classes declaradas dentro da própria classe.
Muita das vezes por alguma situação de encapsulamento isso é legal de usar, porque eu posso ter situações especificas que apenas a classe vai conhecer, eu não preciso ficar declarando nos “uses”, criando uma nova unit.
Quando eu declaro uma classe fora da classe, ela fica visível se alguém declarar isso na “uses” irá ter acesso a essa classe.
Então se eu quero criar uma classe super protegida, super encapsulada, eu posso estar usando as aninhadas.
Vou dar um exemplo simples aqui.
Com um novo projeto criado, irei adicionar uma nova Unit e irei nomeá-la como, Classe.Carro.
type TRoda = class public Tipo : String; Tamanho : String; end; TCarro = class private Marca : String; Modelo : String; public end;
Observe que em nosso código nós criamos a classe TCarro e TRoda, da forma que está criada, se alguém der um “uses” nesta nossa classe Carro ele automaticamente irá enxergar a minha classe Roda também, então por exemplo, eu posso ter a Roda que será usada para o Carro, e também eu posso usar a mesma classe Roda para Moto, mas se isso não estiver bem especializado pode causar algum problema.
Então seu eu tenho a Roda que é especifica pro carro, eu poso declarar essa Roda dentro da classe Carro.
type TCarro = class type TRoda = class public Tipo : String; Tamanho : String; end; private Marca : String; Modelo : String; public end;
Observe que a unica coisa que fiz foi copiar essa minha classe Roda e acrescentar um type dentro da minha classe Carro.
A partir do momento que eu declarei essa minha classe Roda, tudo que está a baixo dela eu posso usar.
type TCarro = class type TRoda = class public Tipo : String; Tamanho : String; end; private Marca : String; Modelo : String; Roda : TRoda; public procedure MontarCarro; end; ... procedure TCarro.MontarCarro; begin Marca := 'BMW'; Modelo := 'i320'; Roda.Tipo := 'Liga Leve'; Roda.Tamanho := '15'; end;
Dessa forma eu encapsulei mais ainda uma classe que é especifica do Carro, eu não tenho essa classe para ser reutilizada por ninguém, então ela está aninhada dentro da minha classe Carro, e somente quem trabalha com a classe Carro que consegue enxergar essa Roda, ninguém mais vai conseguir saber mesmo que a pessoa declarar nas “uses” a unit da classe Carro.
Isso é algo pouco usado, e pouco gente sabe disso, mas é algo muito legal, dependendo do modelo, o tipo do projeto, o tipo de modelagem que você esteja fazendo, isso pode lhe ser muito útil.
Esse post faz parte do treinamento Técnicas avançadas de Delphi.
Nesse treinamento eu reuni as minhas melhores aulas dos meus mais diversos treinamento para entregar para você um conteúdo que vai direto ao ponto, para que você não perca tempo e nem dinheiro na hora de aprender Delphi.
CLIQUE AQUI PARA SABER MAIS SOBRE O TREINAMENTO DE TÉCNICAS AVANÇADAS DE DELPHI.