Classes e Struts - Swift (parte 1)
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Classes e Structs 01 - Intro
Classes e Structs são estruturas flexÃveis que constituem o código do nosso programa, você pode definir propriedades e métodos que adicionam funcionalidades as suas classes e estruturas.
No Swift não há necessidade de criar arquivos de interface e implementação separados (como em C++), classes e structs são definidas em um único arquivo (semelhante a Java).
O que classes e estrutura possuem em comum?
- Definem propriedades
- Definem métodos
- Definem construtores
- Podem ser extendidos para expandir funcionalidades
- Podem assinar protocolos (protocolos exigem a existência de métodos)
Qual o Diferencial de Classes em relação às estruturas?
- Herança
- Deinitializers permitem que instancias liberem recursos
- Type Casting permite que você avalie e interprete o tipo de uma instância de classe em tempo de execução
- Mais de uma referência para a instância de uma classe
- IMPORTANTE Structs são Value Types e são passados por cópia, enquanto classes são Reference Types e são passado por referência, o que significa que structs não usam o contador de referência. Veja o Exemplo abaixo.
==> Você pode criar uma estrutura (struct) PontoR2 com atributos x e y inteiros?
==> Você pode criar uma classe (class) quadrado com um ponto superior a esquerada (topLeft) do tipo PontoR2 e mais um atributo para descreve o lado do quadrado?
Refêrencia vs Valor
Em Swift Classes e Closures são Reference Types (tipos que trabalham com referência), todo o resto é Value Type (tpos que trabalham como valores), inclusive as struts são Value Type. Structs possuem inicializadores autogerados com todas as propriedades ou seja um construtor que recebe todos os atributos.
Veja um exemplo de como funciona um Value Type.
==> Aqui temos uma prova que struts são Value Types. Você pode criar uma prova para arrays?
- IMPORTANTE Assim fica claro o que é um Value Type. Ou seja quando ocorre atribuições em um elemento da estrutura (p1=p2) nada acontece com o elemento que recebeu a cópia (nesse caso alterações em p2 não interferem em p1).
Veja um exemplo de como funciona um Reference Type.
==> Você pode fazer um exemplo usando sua classe quadrado?
- IMPORTANTE Assim fica claro o que é um Reference Type. Ou seja quando ocorre atribuições em um objeto de uma classe (lirio = azaleia) esse objeto (lirio) recebe uma referência para o obejto (azaleia) e não uma cópia. Assim, alterações em azaleia irão refletir em lÃrio.
Veja mais um exemplo de como funciona um Value e Reference Types.
==> Você pode fazer modificações no exemplo de modo a incluir comentários do que está acontecendo?
###Quando usar structs:
- Quando queremos encapsular dados relativamente simples
- Quando Propriedades do modelo também são Value Types
- Quando o modelo não precisa herdar nenhuma propriedade ou comportamentos de modelos existentes ( Pode ser alcançado através de protocolos também )
- Quando os dados encapsulados devem ser copiados e não referenciados.
==> Veja o exemplo e crie o seu próprio. Faça um comentário do porquê justificando a escolha da struct e não class para seu exemplo.