0

Kotlin: Praticando orientação a objetos (Mentoria Santander Bootcamp | Mobile Developer)

Caio Pellegatti
Caio Pellegatti

A mentoria apresentada por Caroline Tenório Ribeiro (Santander) e Luís Gustavo Verri Zacheu (Santander), com apoio da Adriana (Dio), iniciou com a apresentação teórica sobre Programação Orientada a Objeto (POO), com uma breve introdução e apresentação dos 4 pilares da POO. Em seguida, tivemos uma seção hads-on, onde apresentaram vários outros conceitos de POO com exemplos codificados em Kotlin.

A Programação Orientada a Objeto (POO), é uma técnica/paradigma de como escrever e estruturar o código de um software.

Possibilidade de “componentizar” cada peça do programa a ser desenvolvido, e em linhas gerais está voltada para nossa realidade.

Para entendimento do que se trata a orientação a objetos, primeiro se faz necessário entender quais são os requisitos de uma linguagem para ser considerada nesse paradigma, sendo assim, a linguagem precisa atender a tópicos bastante importantes, como os que formam os quatro pilares da POO:

Abstração

A abstração consiste em um dos pontos mais importantes dentro de qualquer linguagem Orientada a Objetos. Como estamos lidando com uma representação de um objeto real, temos que imaginar o que esse objeto irá realizar dentro de nosso sistema. Devem-se considerar três pontos nessa abstração:

1º Ponto: Identidade

A identidade deve ser única dentro do sistema para que não haja conflito. Na maior parte das linguagens, há o conceito de pacotes (ou namespaces). Nessas linguagens, a identidade do objeto não pode ser repetida dentro do pacote, e não necessariamente no sistema inteiro.

2º Ponto: Características

No mundo real qualquer objeto possui elementos que o definem. Dentro da programação orientada a objetos, essas características são nomeadas propriedades. Por exemplo, as propriedades de um objeto “Gato” poderiam ser “Tamanho”, “Raça” e “Idade”.

3º Ponto: Métodos

Na linguagem orientada objeto, as ações e eventos dos objetivos, são chamados de Métodos. Esses métodos podem ser extremamente variáveis, desde “Acender()” em um objeto lâmpada até “Latir()” em um objeto cachorro.

 

Encapsulamento

Encapsulamento é uma das principais técnicas que define a programação orientada a objetos. Se trata de um dos elementos que adicionam segurança à aplicação em uma programação orientada a objetos pelo fato de esconder as propriedades, criando uma espécie de caixa preta.

A maior parte das linguagens orientadas a objetos implementam o encapsulamento baseado em propriedades privadas, ligadas a métodos especiais chamados getters e setters, que irão retornar e setar o valor da propriedade, respectivamente. Essa atitude evita o acesso direto a propriedade do objeto, adicionando uma outra camada de segurança à aplicação. Para fazermos um paralelo com o que vemos no mundo real, temos o encapsulamento em outros elementos. Quando clicamos no botão ligar da televisão por exemplo, não sabemos o que está acontecendo internamente. Podemos então dizer que os métodos que ligam a televisão estão encapsulados.

Herança

Herança é basicamente o reuso de códigos (uma das grandes vantagens da programação orientada a objetos). Essa característica otimiza a produção da aplicação em tempo e linhas de código.

Numa família por exemplo, a criança está herdando características de seus pais. Os pais, por sua vez, herdam algo dos avós, o que faz com que a criança também o faça, e assim sucessivamente.

Na orientação a objetos, a questão é exatamente assim, O objeto abaixo na hierarquia irá herdar características de todos os objetos acima dele, seus “ancestrais”. A herança a partir das características do objeto mais acima é considerada herança direta, enquanto as demais são consideradas heranças indiretas. Por exemplo, na família, a criança herda diretamente do pai e indiretamente do avô e do bisavô.

A questão da herança varia bastante de linguagem para linguagem. Em algumas delas, há a questão da herança múltipla. Isso, essencialmente, significa que o objeto pode herdar características de vários “ancestrais” ao mesmo tempo diretamente.

Polimorfismo

           Na natureza, vemos animais que são capazes de alterar sua forma conforme a necessidade, e é dessa ideia que vem o polimorfismo na orientação a objetos. Como sabemos, os objetos filhos herdam as características e ações de seus “ancestrais”. Entretanto, em alguns casos, é necessário que as ações para um mesmo método seja diferente. Em outras palavras, o polimorfismo consiste na alteração do funcionamento interno de um método herdado de um objeto pai. Tendo um eletrodoméstico como exemplo, esse objeto possui um método, ou ação, “Ligar()”. Temos dois objetos, “Televisão” e “Geladeira”, que não irão ser ligados da mesma forma. Assim, precisamos, para cada uma das classes filhas, reescrever o método “Ligar()”.

           Abaixo, o Diagrama 1 apresenta de forma sintética os 4 quatro pilares da POO apresentados.  

Diagrama 1 – Os 4 pilares da POO

 

Após a apresentação dos conceitos teóricos de POO, iniciou-se uma seção de Hands-On em Kotlin onde trabalhamos a partir do Diagrama 2 e Diagrama 3 abaixo, simulando um problema real, vários conceitos de POO como : classe, atributos, métodos, etc.


         Diagrama 2

 

 

Diagrama 3

 

Conceitos de POO apresentados durante a codificação e complementado com alguns livros de referência, apresentadas no final do artigo:

 

1º) Classes

Uma Classe é uma descrição de um conjunto de objetos que compartilham os mesmos atributos, operações, relacionamentos e semântica.

Características:

Nome — a diferencie das outras classes

Atributos — propriedades que descrevem um intervalo de Valores que as instâncias da classe podem apresentar. Abstraem os tipos de dados ou estados que os objetos de uma classe podem abranger.

Operações (métodos) — implementam serviços que podem Ser solicitados por algum objeto da classe para modificar o Comportamento. Abstraem algo que pode ser feito com um objeto. Algumas vezes, a chamada a uma operação de um objeto altera os Atributos ou o estado do mesmo.

2º) Atributos

 Atributos de uma classe também conhecido como propriedades, descrevem um intervalo de valores que as instâncias da classe podem apresentar. Um atributo é uma variável que pertence a um objeto. Os dados de um objeto são armazenados nos seus atributos.

3º) Métodos

Os métodos são procedimentos ou funções que realizam as ações próprias do objeto. Assim, os métodos são as ações que o objeto pode realizar. Tudo o que o objeto faz é através de seus métodos, pois é através dos seus métodos que um objeto se manifesta, através deles que o objeto interage com os outros objetos. Sendo mais conhecidos como: Método Construtor, Métodos Get e Set, Métodos do usuário e Método sobrescrito.

4º) Objetos

Objetos são instâncias de classes, que determinam qual informação um objeto contém e como ele pode manipulá-la. É uma entidade capaz de reter um estado (informação) e que oferece uma série de informações (comportamento) ou para examinar ou para afetar este estado. É através deles que praticamente todo o processamento ocorre em sistemas implementados com linguagens de programação orientada a objetos.

5º) Estado

O estado de um objeto é representado pelas variáveis definidas na própria classe. Sendo eles:

           Concreto: que existe fisicamente.

           Abstrato : é um conceito.

 

6º) Escopo e variável

           O código que “enxerga” uma determinada variável é chamada o escopo da variável. Podendo definir uma variável em global ou local. Assim, o escopo de uma variável global é a classe inteira, e o escopo de uma variável local é o método, ou bloco contido dentro do método, ao qual ela pertence. As variáveis declaradas fora de qualquer método (usualmente no cabeçalho da classe) e são acessíveis por qualquer método da classe são chamadas globais. Muitas vezes, variáveis auxiliares são declaradas dentro de um determinado método, ou até dentro de um bloco menor. Tais variáveis são chamadas locais. Elas existem somente durante a execução daquele método ou bloco.

7º) Passagem de parâmetros

           As passagens de parâmetros ocorrem a troca de mensagens através da chamada aos métodos de um objeto por outro objeto.

8º) Abstração

           Ocorre em você conseguir dar uma identidade e a identidade deve ser única dentro do sistema colando em si as suas propriedades, ex: “Raça” e “ Idade”.

9º) Visibilidade

           São distribuídas em três tipos, private (privado), public (público) e protect (protegido).

                 Privado: uma função local e um único bloco de código.

                 Público: visível para tudo uma função a ser chamada a qualquer momento.

Protegido: esse caso restringe o parâmetro fora da classe, mas ainda acessível as suas subclasses (herança)

10º) Encapsulamento

           Se trata do fato de esconder as propriedades, criando uma espécie de caixa preta. Sempre com os métodos privados ligadas a métodos especiais chamados getters e setters, que irão retornar e setar o valor da propriedade, respectivamente. O encapsulamento evita o acesso direto a propriedade do objeto, adicionando uma outra camada de segurança à aplicação.

11º) Associação

           Sempre utilizada para relacionar duas classes sendo que os objetos podem se comunicar.

12º) Agregação

           Sendo visto que uma agregação indica que uma das classes do relacionamento é uma parte ou está contida em outra classe. Sendo assim pode se dizer que seria uma união de classes.

13º) Composições

           Seria um relacionamento com características todo por parte onde existe um entendimento entre todas partes desta forma, se o todo não existir, as partes também não existirão. Um exemplo de composição é o pé: Um pé é composto por dedos. Os dedos compõem o pé. Não há lógica em existir um dedo sem o pé, porém pode-se ter um pé sem um ou mais dedos.

14º) Herança

           Uma característica bem pensada como uma família vamos imaginar: a criança, por exemplo, está herdando características de seus pais. Os pais, herdam algo dos avós, o que faz com que a criança também tem características de seus avos, e assim sucessivamente.

 15º) Dependência

           A Dependência deixa visto que uma mudança na especificação de um elemento pode alterar o valor do elemento dependente.

16º) Interface

           Podendo dizer que a interface seria um contrato entre a classe e o mundo exterior. Quando uma classe implementa uma interface, se compromete a fornecer o comportamento publicado por esta interface. As classes ajudam a definir um objeto e seu comportamento e as interfaces que auxiliam na definição dessas classes. As interfaces são formadas pela declaração de um ou mais métodos, os quais obrigatoriamente não possuem corpo.


Conclusão

A programação orientada a objetos (POO) é uma abordagem de programação que serve de elo entre os problemas existentes e as soluções computacionais apresentadas no campo da programação. Esse elo é de suma importância na solução de problemas grandes e complexos.

Na prática, verificamos que a POO, apresenta vantagens com relação da reutilização de código, leitura e manutenção de código e também a criação de bibliotecas.


Reutilização de Código

           A reutilização de código é um dos principais requisitos no desenvolvimento de software atual. Com a complexidade dos sistemas cada vez maior, o tempo de desenvolvimento iria aumentar exponencialmente caso não fosse possível a reutilização. A orientação a objetos permite que haja uma reutilização do código criado, diminuindo o tempo de desenvolvimento, bem como o número de linhas de código. Isso é possível devido ao fato de que as linguagens de programação orientada a objetos trazem representações muito claras de cada um dos elementos, e esses elementos normalmente não são interdependentes. Essa independência entre as partes do software é o que permite que esse código seja reutilizado em outros sistemas no futuro.


Leitura e Manutenção de Código

           Como a representação do sistema se aproxima muito do que vemos na vida real, o entendimento do sistema como um todo e de cada parte individualmente fica muito mais simples. Isso permite que a equipe de desenvolvimento não fique dependente de uma pessoa apenas, como acontecia com frequência em linguagens estruturadas como o C, por exemplo.


Criação de bibliotecas

           A criação de bibliotecas é outro ponto que é muito mais simples com a orientação a objetos. No caso das linguagens estruturadas, como o C, temos que as bibliotecas são coleções de procedimentos (ou funções) que podem ser reutilizadas. No caso da POO, entretanto, as bibliotecas trazem representações de classes, que são muito mais claras para permitirem a reutilização.

 

 

Referências

Silva Filho, Antonio Mendes da Introdução à programação orientada a objetos com C++ / Antonio Mendes da Silva Filho. – Rio de Janeiro: Elsevier, 2010.

H. M. Deitel e P. J. Deitel. C++ Como Programar. Prentice Hall. 2006.

C. S. Horstmann e G. Cornell. Core Java. Volume 1 – Fundamentos. Pearson. 2009.

D. Barnes e M. Kolling. Programação Orientada a Objetos Com Java. Pearson. Prentice Hall. 2008.

Programming Kotlin : https://subscription.packtpub.com/book/application_development/9781787126367

0
0

Comentários (0)

Sou um apaixonado por tecnologia. Orgulho de transformar os negócios com foco no melhor serviço ao cliente com projetos que ativos até hoje.

Brasil