Entendendo orientação a objetos na prática (parte 1)

Originalmente este artigo compõe uma série em meu site pessoal chamada "aprender programando". Nesta parte são expostos os conceitos fundamentais da orientação a objetos. Ao fim desta, espera-se que o leitor compreenda especialmente o conceito de encapsulamento e faça a diferenciação entre classes e objetos. Boa leitura!

[ Hits: 29.945 ]

Por: Isaque Vieira de Sousa Alves em 10/01/2010


Conceitos básicos



Independente da linguagem de programação, os conceitos apresentados são sempre os mesmos.

Nesta abordagem utilizarei a linguagem Java. Por quê? Porque considero uma linguagem mais didática, mais fácil de demonstrar os conceitos, e até mesmo, porque é uma tecnologia livre e multiplataforma, não importando se você vai compilar o programa num ambiente Linux ou outro qualquer.

Abstração

Em OO, abstração é o principal dos conceitos, representando a capacidade do projetista/desenvolvedor de captar apenas a essência dos objetos que irão compor a solução num sistema de software. Antes de modelar ou codificar um sistema, de qualquer natureza, abstrair a situação é sempre o primeiro passo.

Classes

Uma classe, em poucas palavras, é a definição de características ou propriedades que tornam determinados objetos similares e membros de um mesmo grupo. Uma classe não é um objeto mas o representa estruturalmente. Todo objeto é tipificado por uma classe, assim, uma classe representa um tipo de objeto, sendo uma expressão de sentido amplo.

Atributos

Atributo é toda e qualquer característica intrínseca a um determinado objeto, ou seja, são as propriedades inerentes à própria existência do objeto, dela dependendo.

Métodos

Dá-se o nome de método a toda e qualquer ação que um determinado objeto possa realizar ou sofrer. Os métodos tornam possíveis a troca de mensagens entre objetos e também criam mecanismos através dos quais um objeto dentro de um sistema, possa se comunicar com o mundo real.

Encapsulamento

Encapsulamento é uma técnica cujo principal objetivo é garantir a segurança das informações de um objeto. Consiste em se definir todos os atributos de uma classe e os métodos que implementam operações internas como privados ou protegidos (dependendo do contexto) e todos os demais métodos como públicos, possibilitando a coleta ou alteração das propriedades, sem que contudo haja uma manipulação direta dos atributos.

Associação

Associação, para quem já estudou análise, ou mesmo iniciou o estudo de alguma disciplina sobre banco de dados, é o equivalente a um relacionamento. Na verdade Associação é um relacionamento. Duas classes são participantes de uma associação quando uma ou mais características de uma delas, depende de alguma(s) propriedade(s) da outra.

Hierarquia de classe

Hierarquia é um relacionamento através do qual diversas classes compartilham características comuns com base em uma superclasse.

Superclasse

Dentro de uma hierarquia, a superclasse ou classe-mãe é a classe da qual as subclasses devem herdar diretamente os atributos e métodos.

Subclasse

Subclasse ou classe filha, em uma hierarquia é uma classe que herda direta ou indiretamente de outra classe superior (superclasse ou classe-mãe).

Herança

Herança é o compartilhamento de características entre diferentes objetos de classes diferentes.

Herança simples

Ocorre quando uma classe herda suas características de apenas uma única superclasse. É o tipo primário de herança em Java.

Herança múltipla

Ocorre quando uma classe herda suas características de mais de uma classe ou interface. Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces.

Interfaces e classes abstratas

Interfaces e classes abstratas são mecanismos de definições de características genéricas para objetos.

Classes abstratas

Uma classe abstrata é geralmente uma superclasse a qual nunca poderá ser instanciada. Uma classe abstrata pode ou não conter métodos abstratos, mas obrigatoriamente, se ela contiver pelo menos um método abstrato, ela será uma classe abstrata.

Métodos abstratos

Métodos abstratos são métodos com cabeçalho definidos porém sem implementação funcional.

Interfaces

Uma interface e uma classe abstrata têm em comum o fato de que ambas possibilitam a implementação de herança e compartilhamento de características entre objetos. Mas morre nisso. Obrigatoriamente, uma interface é um conjunto de métodos não implementados.

Objeto

Um objeto é uma representação computacional de uma entidade do mundo real, de um ser existente, que tenha identidade e características próprias. É também entendido com a instância de uma classe.

Instância

Instanciar é definir como existente um determinado objeto de um determinado tipo (classe), assim, uma instancia é uma realização de uma determinada classe. Em java, uma instancia geralmente é criada com o uso do construtor new.

Polimorfismo

Polimorfismo é uma característica inerente ao conceito de herança. Todas as classe dentro de uma hierarquia tem os mesmos atributos e métodos, porém, eles podem diferir tanto na forma como são implementados em diferentes classes (override) como no tipo de mensagem que cada um deve retornar ou receber(overload).

Overload

Overload ou sobrecarga é uma característica polimórfica que permite que em uma hierarquia de classe existam diversos métodos com nomes iguais porém com variações nos argumentos, tipos de retorno etc.

Override

Override ou sobrescrita é uma característica que permite que em uma hierarquia de classe, um mesmo método possa ser implementado de formas diferentes em todas as classes, tendo porém a mesma assinatura (tipo de retorno, argumentos etc) em todas elas.

Página anterior     Próxima página

Páginas do artigo
   1. Apresentação
   2. Orientação a objetos - definição e histórico
   3. Conceitos básicos
   4. Conclusão e referencias
Outros artigos deste autor

Linux, a pirataria de software e a desvalorização do desenvolvedor (parte 2)

Linux, a pirataria de software e a desvalorização do desenvolvedor (parte 1)

Diagnosticando problemas variados em ambientes GNU/Linux (parte 1)

GNU/Linux: Liberdade e Cosmovisão

Projetos de software livre descontinuados: um problema com solução

Leitura recomendada

HrStatus - agilizando a virada do horário de verão

JlGui - Java Media Player

Instalar o Java Development Kit (JDK) 11 no Debian 9

Lançamento do GFP 0.1.4.5 - Gerenciador Financeiro Pessoal

Transforme seu celular em terminal sem fio SSH/Telnet

  
Comentários
[1] Comentário enviado por Feko em 10/01/2010 - 14:41h

Show de bola :D
Se for possível, na parte 2, aborde um pouco de operator overload. Isso tá bastante obscuro pra mim.

[2] Comentário enviado por mateusbarsotti em 11/01/2010 - 09:48h

Ótimo artigo, parabéns.
Um resumão muito bom. Vou salvar em arquivo e deixar como fonte de consulta. Estou estudando para certificação e isso vai me ajudar bastante.

Valeu

[3] Comentário enviado por isaque_alves em 11/01/2010 - 12:03h

Tá valendo moçada.

Olha, Feko, até onde sei e aprendi, Java, que é a linguagem que usarei nesta abordagem, não oferece a possibilidade de você implementar operator overloading.

C++ e C# sim.

Sobrecarregar operadores não é uma tarefa lá muito amiga. Muita gente sente muita dificuldade mesmo.
Basicamente o objetivo de sobrecarregar um operador é alterar seu comportamento para incluir outros possíveis operandos em sua esfera de ação. Por padrão, os operadores comuns (+, -, *, =, etc) só entendem argumentos baseados em tipos inteiros primitivos (int, char, byte, etc). Sobrecarregar pode oferecer uma nova funcionalidade, como por exemplo, 'somar' dois retângulos, ou duas circunferências (claro que isso é apenas uma situação hipotética... e meio pobre...).
Em suma, uma boa implementação usando operator overload requer antes de tudo, um ótimo entendimento de... Polimorfismo.

Alguns exemplos pra você ver melhor:
* http://bit.ly/4ZpbVl -> C# operator overload
* http://bit.ly/5dBMqS -> C++ operator overload

[4] Comentário enviado por everton_fuzz em 11/01/2010 - 15:27h

Acho que você só deve tomar cuidado com a definição de herança multipla.

"Ocorre quando uma classe herda suas características de mais de uma classe ou interface. Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces."

Implementar uma interface nao é utilizar herança multipla, mas sim uma 'herança parcial', pois uma interface só possui métodos.

Java NAO incorpora herança multipla. Alguns dizem inclusive que Interfaces são 'gambiarras' inventadas para suprir a necessidade de utilizar caracteristicas de classes distintas.

No mais esta ótimo!, parabens pelo artigo!

Att.

Éverton

[5] Comentário enviado por isaque_alves em 11/01/2010 - 17:30h

Com certeza, Éverton...
Realmente Java não 'tem' herança múltipla de classes...
Talvez a infelicidade tenha sido usar a expressão "Em Java, a herança múltipla é realizada pelo uso de implementações de interfaces"...
Na verdade a herança múltipla é apenas simulada por meio de Interfaces.

[6] Comentário enviado por everton3x em 12/01/2010 - 09:34h

Parabéns pelo artigo. Muito esclarecedor, principalmente para quem tem dificuldade com OO.

[7] Comentário enviado por luizcarlos18rj em 15/04/2016 - 15:42h

Quando sai a parte 2? Eu aprendi programação estrutural orientada a eventos, nunca entendi OO


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts