[Pesquisar este blog]

quinta-feira, 11 de janeiro de 2018

POO::Fundamentos-01-Características da POO

POO-F-00-Apresentação POO-F-02-Objetos, Tipos e Classes
A programação orientada a objetos, ou apenas POO, é a técnica dominante no desenvolvimento de software. Todo programador e todo projetista de software deve  dominar os conceitos da orientação a objetos (OO) e das técnicas fundamentais de sua programação.


Concebida há várias décadas, a OO deu origem a muitas linguagens de programação de sucesso, como Eiffel, Smalltalk, C++, Java e C#, entre dezenas de outras. As motivações para utilização desta técnica de projeto e de programação são sua capacidade de representação, que facilita o projeto, além de sua constituição modular, que podem aumentar a produtividade e reduzir os custos de desenvolvimento e de manutenção.

É possível afirmar que, no sentido mais simples, um objeto é uma coisa ou entidade do mundo real [1]. Já o termo orientado significa dirigido ou direcionado.

Assim, o termo orientado a objetos, conforme Page-Jones, é intrinsecamente destituído de qualquer sentido [2], pois como o termo objeto se aplica a, praticamente, qualquer coisa, resulta em algo como "direcionado a qualquer coisa". Por conta disso, sempre houve considerável dificuldade a respeito de uma definição concordante desta denominação.

Comumente, o projeto orientado à objetos é compreendido como uma estratégia onde os projetistas de sistemas pensam em termos de coisas ao invés de operações ou funções [3]. A construção de um sistema orientado a objetos (OO) é a combinação de vários objetos que interagem entre si.

Outros autores, como Deitel & Deitel [4], Savitch [5] e o Page-Jones [2] preferem definir a orientação a objetos como uma técnica de projeto que agrupa um conjunto de conceitos fundamentais: classificação, encapsulamento, especialização, generalização, identidade, ocultação de informações, polimorfismo, retenção de estado e troca de mensagens.

Estes conceitos podem ser rapidamente definidos como segue.

Classificação

Consiste na criação de categorias ou tipos de objetos que compartilham características e comportamento comuns. É uma ação natural no nosso modo de compreender o mundo a nossa volta [6]. A classificação ocorre por meio da criação de classes (tipos de objetos), que são modelos que permitem a geração de novos objetos, que terão as mesmas características e comportamentos do modelo que os originou [2]. Uma classe pode abrigar características (ou atributos) do tipo, assim como comportamentos (ou operações) sobre suas características.

Encapsulamento

É o agrupamento de ideias correlacionadas na forma unidades, módulos ou classes, de maneira que tal conceito pode usado apenas por meio de seu nome [2]. O encapsulamento também determina a representação do objeto, ou seja, possibilita que um objeto seja usado apenas por sua aparência exterior [6]. 

Especialização

Mecanismo da orientação a objetos pelo qual é possível a criação de novas classes (tipos) a partir de outras existentes, para adição de características e operações. A especialização é usualmente denominada de herança, onde uma classe B compartilha características e operações definidas em outra A [6], ou seja, a herança (de B a partir de A) é habilidade de B no uso de elementos A, como se estivessem definidos no próprio B [2]. A herança permite a criação de famílias de classes.

Generalização

Capacidade de utilizar objetos de tipos diferentes considerando apenas seus elementos comuns, ou seja, aqueles usualmente herdados de seus ancestrais comuns. Isto permite que objetos efetivamente diferentes possam ser usados para a realização de uma tarefa específica, o que confere grande flexibilidade aos sistemas assim construídos. Também pode se referir a construção de classes genéricas, ou seja, capazes de realizar suas operações sobre conteúdos internos diferentes [2][7].

Identidade

É a propriedade de cada objeto de ser unicamente distinguido dos demais [6], ou seja, sua identidade, permitindo seu tratamento individual [2]. É comum a existência de um identificar de objetos (object identifier - oid) nos sistemas de programação orientada a objetos.

Ocultação de informações

Permitindo preservar informações importantes dentro do objeto, externando apenas o que se julga conveniente ou necessário. Partes da própria construção do objeto (sua implementação) podem ser ocultadas pelo mesmo mecanismo. A ocultação das informações é obtida por meio dos mecanismos de encapsulamento [2][6][7].

Polimorfismo

Mecanismo essencial dos sistemas orientados a objeto que possibilita admitir muitas formas. Na orientação a objetos o polimorfismo pode se manifestar no acionamento de operações, na generalização e especialização.

Retenção de estado

Se refere a habilidade de um objeto de guardar informações sobre seu próprio estado [2], ou seja, é a memória própria de cada objeto que serve para armazenar suas características individuais e também outros dados que mantém consigo (seus estados), usualmente na forma de atributos [6].

Troca de mensagens

Uma mensagem é o veículo pelo qual um objeto remetente (caller) transmite um pedido a um objeto destinatário (receiver) para que ele realize uma de suas operações [2]. Os objetos de uma mesma classe, ou seja, do mesmo tipo, são capazes de receber os mesmos tipos de mensagens [4], pois podem realizar as mesmas operações.

Os objetos mantêm informações próprias que constituem seu estado local, além de prover operações para modificar, de maneira limitada, tal estado.

Assim, um objeto combina dados e operações específicas, o que define um conjunto particular de responsabilidades. Um sistema OO é um conjunto de objetos que se inter-relacionam para produzir os resultados desejados [7]

Assim, a programação orientada a objetos é uma forma particular de organizar o desenvolvimento de software como uma coleção de objetos que incorporam tanto uma estrutura de dados como comportamentos [8].

POO-F-00-Apresentação POO-F-02-Objetos, Tipos e Classes

Referências Bibliográficas

[1] JAMSA, K.; KLANDER, L.. Programando em C/C++: a bíblia. São Paulo: Makron Books, 1999.
[2] PAGE_JONES, M.. Fundamentos do Desenho Orientado a Objeto com UML. São Paulo: Makron Books, 2001.
[3] SOMMERVILLE, I.. Software Engineering. 6th. Ed. Harlow: Pearson, 2001.
[4] DEITEL, H.M.; DEITEL, P.J.. Java: como programar. 6a, Ed. São Paulo: Pearson Prentice-Hall, 2005.
[5] SAVITCH, W.. C++ Absoluto. São Paulo: Pearson Addison-Wesley, 2004.
[6] JANDL JR., P.. Introdução ao C++. São Paulo: Futura, 2003.
[7] JANDL JR. P.. Java - guia do programador. 3a. Ed. São Paulo: Novatec, 2015.
[8] RUMBAUGH, J.; BLAHA, M.; PREMERLANI, W.; EDDY, F.; LORENSEN, W.. Object-oriented modeling and design. Englewoods Cliffs: Prentice-Hall, 1991.

Nenhum comentário: