Módulo 2

Desenvolvimento de software orientado a objetos

O desenvolvimento de um software orientado a objetos nada mais é que a aproximação do manejo das coisas de um mundo real com o manejo das estruturas de um sistema de software. Em virtude disso, temos o conceito de objeto como sendo algo genérico, que poderá retratar qualquer coisa tangível do mundo real, como animais e pessoas, os quais carregam consigo determinadas características (atributos) e certos comportamentos (ações).

Desse modo, é essencial entendermos o conceito de orientação a objetos, visto que a UML é comumente empregada nesse paradigma. Assim, você verá a seguir todos os principais conceitos dessa abordagem.

Classes, abstração e instanciação

Inicialmente, você entenderá os conceitos de classes, abstração e instanciação de modo mais aprofundado, acompanhe o vídeo a seguir!

Vídeo

Confira o vídeo sobre conceitos de classes, abstração e instanciação.

Confira aqui o que foi abordado no vídeo.

Diante do que você viu, de modo resumido, podemos dizer que a classe é o nome dado a um grupo de objetos com características em comum, já o conceito de abstração representa as diferentes manifestações de um objeto pertencente a uma classe. Por sua vez, o termo instanciação se refere a uma manifestação específica de um objeto referente a uma classe.

Na Prática

A partir disso, a fim de que esses conceitos se tornem mais concretos no seu entendimento, imagine o seguinte: existe o objeto no mundo denominado "cão". Por sua vez, a classe dele é a canina, sendo que a sua abstração é a de um poodle, de um vira lata, de um basset e, finalmente, uma instanciação dele é o cão lassie.

Neste tópico, você pôde entender os conceitos de classes, abstração e instanciação. Inclusive, não só eles são importantes para compreensão da Linguagem de Modelagem Unificada, bem como auxiliam no entendimento de outro conceito: o de propriedades (ou ainda denominado de atributos).

Diante disso, conforme você verá no tópico adiante, as propriedades, ou atributos, possuem um papel muito relevante que é estabelecer as características e os atributos dos elementos de uma classe.

Propriedades ou atributos

As propriedades, também conhecidas como atributos, trata-se de recursos de uma classe ou qualquer elemento de dados. Em outras palavras, são as características da estrutura de uma classe. Em determinadas linguagens de programação, os atributos são chamados de “membros de dados”, ou “variáveis de instância de classe”.

Os atributos são apresentados na segunda divisão da classe e, geralmente, possuem dois dados, que são: tipo de informação que o atributo armazena (character, integer etc.) e nome que o identifica.

Os atributos possuem características referentes à classe pertencente. Todas as instâncias de uma mesma classe terão propriedades iguais, mas podem conter valores diferentes. Na classe carro, por exemplo, atributos como cor, modelo e marca do automóvel podem ter valores distintos.

Outra característica importante é a visibilidade de um atributo, que poderá ser privada, pública, de pacote e protegida. Veja mais detalhes na tabela!

Visibilidades de um atributo

Privada - Só a própria classe a qual o atributo pertence pode acessá-lo (enxergá-lo). É simbolizada com um sinal de subtração (-). Pública - O atributo pode ser acessado (enxergado) por outras classes. É simbolizada pelo sinal de adição (+). De pacote - O atributo só poderá ser acessado pelas classes do pacote que o contém. É simbolizada pelo til (~) e disponibilizada em algumas linguagens, como C# e Java. Protegida - O atributo só poderá ser acessado pela própria classe (superclasse) e suas subclasses. É simbolizada pelo sustenido (#)

Vale ressaltar que o valor inicial e o tipo de dado do atributo dependerão da linguagem de programação utilizada.

Outra característica importante das classes são os comportamentos (ações) que elas podem ter. Ainda utilizando o exemplo da classe “pessoa”, esta pode ter o comportamento de andar, deitar-se, correr, nadar, dirigir, trabalhar, comer etc.

Portanto, um objeto associado à criação de um software, a partir do qual a linguagem UML será empregada, possui um conjunto de atributos, ou seja, as características da estrutura de uma classe juntamente com os seus comportamentos.

Contudo, ainda é válido abordar outro conceito atrelado aos anteriores e que são muito relevantes. Estamos falando das operações. Acompanhe na sequência!

Métodos, operações ou comportamentos

As classes carregam operações — termo utilizado pela UML —, também conhecidas como métodos ou comportamentos (ações).

Um método é definido por uma ação que um objeto de determinada classe pode realizar, ou pelos serviços suportados por essa classe. Ele é guardado na terceira parte da classe.

Na Prática

Para que você entenda melhor, veja este caso: na criação de um software, um dos objetos representados é um fusca, logo, esse objeto está inserido na classe “carro”, sendo que um dos métodos desempenhados por essa classe é a de “transportar pessoas”.

Considerando isso, acompanhe também o recurso a seguir:

#PraCegoVer: na imagem, existem várias linhas de programação com cores claras sobre um fundo preto.

Na criação de um software, quando se aplica às linhas de programação voltadas para os objetos, esses realizam a comunicação e interação por meio de mensagens, as quais identificam os métodos que serão executados no objeto receptor. Para chamar um método, é enviada uma mensagem para ele com a especificação do nome do método, da lista de argumentos necessários e do nome do objeto.

Ou seja, é como se a mensagem presente na linguagem de programação tivesse o seguinte comando: “o objeto fusca dentro da classe dos carros deve transportar pessoas”.

#PraCegoVer: na imagem, existem várias linhas de programação com cores claras sobre um fundo preto. Em destaque e sobre tudo isso, há uma lupa e a sombra de quem a carrega.

Pode-se dizer, então, que o método é a abstração de um comportamento parecido entre objetos distintos, em que uma operação tem as seguintes características: tipo de retorno, nome, lista de argumentos e visibilidade. Considerando o exemplo anterior, é como se, no momento da programação, o software entendesse que, dentro da classe dos carros, tanto um fusca, quanto uma kombi podem transportar pessoas.

A partir do exemplo anterior, você viu o conceito de métodos e de comportamentos, os quais estão associados à classe, à abstração e à instanciação.

Entretanto, há outro conceito essencial neste contexto: a herança. Isto é, o fato de que uma classe filha (subclasse) pode herdar o comportamento e/ou a estrutura de uma classe mãe (super classe). Vamos conferir como ela funciona? Siga em frente!

Herança ou generalização

A herança, também conhecida por generalização, possibilita o reaproveitamento de métodos e atributos. Com isso, otimiza tempo no desenvolvimento do software. Observe a imagem com atenção!

#PraCegoVer: na imagem, temos um diagrama de classes representando a herança. Há quatro caixas de códigos, sendo uma principal e três relacionadas abaixo. A principal diz respeito ao veículo (na qual estão escritas as seguintes palavras: “marca: , ano: , modelo: , cor: , ligar() e acelerar()”), enquanto as demais são ônibus (na qual estão escritas as seguintes palavras: “passageiros: , “acionar campainha()”), caminhão (na qual estão escritas as seguintes palavras: “eixos: , tara: , trucado: , levantar carroceria()”) e carro (na qual está escrita a seguinte palavra: “combustível”).

Note que a generalização envolve os conceitos de classe mãe (superclasse) e classe filha (subclasse). A superclasse é uma classe que possui várias outras criadas a partir dela, que são as subclasses. Logo, estas, criadas a partir da superclasse, herdam todos os seus métodos e atributos.

No exemplo utilizado na imagem, a classe “veículo” é a classe mãe (superclasse), enquanto as classes “carro”, “ônibus” e “caminhão” são as classes filhas (subclasses ou derivadas) que herdaram os atributos de marca, ano, cor e modelo, assim como os comportamentos de acelerar e ligar da classe mãe.

Além disso, as classes filhas terão seus atributos e métodos exclusivos que os distinguiram, como o “carro”, que tem o atributo exclusivo “combustível”; o “ônibus”, que terá o atributo exclusivo “passageiro” e o comportamento (operação) exclusivo “acionar campainha”; e “caminhão”, que terá os atributos exclusivos “eixos”, “tara” e “trucado”, com o comportamento de “levantar carroceria”.

Até aqui você compreendeu o conceito de herança e como ele se aplica na relação entre classe mãe e filha. Vale ressaltar que a herança é um excelente recurso na criação de software, sobretudo, porque ele otimiza esse processo.

Siga adiante para conhecer o conceito de polimorfismo e como ele pode ajudá-lo no desenvolvimento de seu software.

Polimorfismo

Você saberia explicar do que se trata? Entenda melhor seu conceito, com o podcast que preparamos para você!

Podcast

Confira o podcast sobre polimorfismo.

Confira aqui o que foi abordado no podcast.

Simples não é mesmo? Você percebeu que, no processo de criação das classes, ainda existem subclassificações, necessitando de um recurso que auxilie na derivação entre uma superclasse e as suas subclasses, sendo que isso é feito a partir do conceito de polimorfismo.

Todavia, é interessante observar que as informações contidas em uma classe mãe ou filha podem, ainda, estar visíveis ou não para outros objetos, que é o conceito de encapsulamento, que você estudará agora. Vamos lá?

Encapsulamento

A ocultação de informações, mais conhecida por encapsulamento, refere-se ao procedimento de separar as questões internas das externas de um objeto. Dessa maneira, alguns detalhes ficam ocultos dos outros objetos, dizendo respeito somente ao próprio objeto a que pertencem.

Observe com atenção na imagem, como o encapsulamento pode ser público (+), protected (#), private (-) ou package (~).

#PraCegoVer:na imagem, temos um exemplo de encapsulamento. Do lado esquerdo, encontramos as possibilidades (público, que é visível para qualquer elementos que possa ver a classe; protected, que é visível a outros elementos dentro da classe e de subclasses; private, que é visível a outros elementos dentro da classe; e package, que é visível a elementos do mesmo pacote). Do lado direito, há uma caixa com a classe “carro”, sendo que, dentro dela, estão escritas as seguintes palavras “-Tipo: Texto, -Cor: Texto, - Placa: Texto, Nº Portas: Inteiro ..., +Acelerar (): void, +Frear(): void, TrocarMarcha(x): void, +Buzinar(): void” .

Dessa forma, o principal benefício do encapsulamento é a possibilidade de isolar (proteger) os dados. Quando dizemos que os atributos estão encapsulados, queremos explicar que estão protegidos por um código, de modo que só serão acessíveis (visíveis) na operação em que foram concebidos. Ele se aplica para as operações, quando estas estão visíveis apenas ao objeto ao qual pertencem.

É importante salientar que o ato de encapsular cria uma dependência direta com a herança, visto que os objetos da classe filha herdaram todos os atributos e todas as ações (operações) da classe mãe.

Saiba Mais

Para saber mais detalhes sobre a programação orientada a objetos, sugerimos que leia o artigo POO: Tudo sobre Programação Orientada a Objetos!, escrito por Cairo Noleto. Também indicamos que assista ao vídeo O que é Programação Orientada a Objetos - Conceitos Básicos de POO para que os conceitos fiquem mais claros!

Parabéns! Você chegou ao final do módulo 2.

Aqui abordamos os conceitos essenciais para a sua futura atuação profissional no contexto da POO (Programação Orientada a Objetos), que é uma importante forma de se desenvolver softwares a partir do uso da linguagem UML.

Para isso, você entendeu os conceitos de classes, abstração e instanciação, atributos e comportamentos, herança e polimorfismo.

Agora você está por dentro de o que é a programação orientada a objetos e os conceitos relacionados! Siga para o próximo módulo para aprender sobre as notações e o desenvolvimento de uma UML.

Selecione o botão “Avançar” e confira!