OOAD - Princípios Orientados a Objetos

Princípios de Sistemas Orientados a Objetos

A estrutura conceitual dos sistemas orientados a objetos é baseada no modelo de objetos. Existem duas categorias de elementos em um sistema orientado a objetos -

Major Elements- Por major, entende-se que se um modelo não possuir nenhum desses elementos, ele deixa de ser orientado a objetos. Os quatro elementos principais são -

  • Abstraction
  • Encapsulation
  • Modularity
  • Hierarchy

Minor Elements- Por menor, significa que esses elementos são úteis, mas não parte indispensável do modelo de objeto. Os três elementos menores são -

  • Typing
  • Concurrency
  • Persistence

Abstração

Abstração significa focar nas características essenciais de um elemento ou objeto em OOP, ignorando suas propriedades estranhas ou acidentais. Os recursos essenciais são relativos ao contexto no qual o objeto está sendo usado.

Grady Booch definiu abstração da seguinte forma -

“Uma abstração denota as características essenciais de um objeto que o distinguem de todos os outros tipos de objetos e, portanto, fornecem limites conceituais nitidamente definidos, em relação à perspectiva do observador.”

Example - Quando uma classe Aluno é projetada, os atributos matricula_number, nome, curso e endereço são incluídos, enquanto características como pulse_rate e size_of_shoe são eliminadas, uma vez que são irrelevantes na perspectiva da instituição de ensino.

Encapsulamento

Encapsulamento é o processo de vincular atributos e métodos dentro de uma classe. Por meio do encapsulamento, os detalhes internos de uma classe podem ser ocultados de fora. A classe possui métodos que fornecem interfaces de usuário pelas quais os serviços fornecidos pela classe podem ser usados.

Modularidade

Modularidade é o processo de decompor um problema (programa) em um conjunto de módulos de modo a reduzir a complexidade geral do problema. Booch definiu modularidade como -

“Modularidade é a propriedade de um sistema que foi decomposto em um conjunto de módulos coesos e fracamente acoplados.”

A modularidade está intrinsecamente ligada ao encapsulamento. A modularidade pode ser visualizada como uma forma de mapear abstrações encapsuladas em módulos físicos reais com alta coesão dentro dos módulos e sua interação ou acoplamento entre módulos é baixa.

Hierarquia

Nas palavras de Grady Booch, “Hierarquia é a classificação ou ordenação da abstração”. Por meio da hierarquia, um sistema pode ser composto de subsistemas inter-relacionados, que podem ter seus próprios subsistemas e assim por diante, até que os menores componentes de nível sejam alcançados. Ele usa o princípio de “dividir para conquistar”. A hierarquia permite a reutilização do código.

Os dois tipos de hierarquias em OOA são -

  • “IS–A” hierarchy- Define a relação hierárquica na herança, por meio da qual, de uma superclasse, várias subclasses podem ser derivadas, as quais podem ter subclasses novamente e assim por diante. Por exemplo, se derivarmos uma classe Rosa de uma classe Flor, podemos dizer que uma rosa “é uma” flor.

  • “PART–OF” hierarchy- Define a relação hierárquica de agregação pela qual uma classe pode ser composta por outras classes. Por exemplo, uma flor é composta de sépalas, pétalas, estames e carpelos. Pode-se dizer que uma pétala é uma “parte” da flor.

Digitando

De acordo com as teorias de tipo de dados abstratos, um tipo é uma caracterização de um conjunto de elementos. Em OOP, uma classe é visualizada como um tipo com propriedades distintas de quaisquer outros tipos. A digitação é a aplicação da noção de que um objeto é uma instância de uma única classe ou tipo. Ele também impõe que objetos de diferentes tipos geralmente não sejam trocados; e só pode ser trocado de uma maneira muito restrita se for absolutamente necessário.

Os dois tipos de digitação são -

  • Strong Typing - Aqui, a operação em um objeto é verificada no momento da compilação, como na linguagem de programação Eiffel.

  • Weak Typing- Aqui, as mensagens podem ser enviadas para qualquer turma. A operação é verificada apenas no momento da execução, como na linguagem de programação Smalltalk.

Simultaneidade

A simultaneidade em sistemas operacionais permite realizar várias tarefas ou processos simultaneamente. Quando existe um único processo em um sistema, diz-se que existe um único thread de controle. No entanto, a maioria dos sistemas tem vários threads, alguns ativos, alguns esperando pela CPU, alguns suspensos e alguns encerrados. Sistemas com múltiplas CPUs permitem inerentemente threads de controle simultâneos; mas os sistemas rodando em uma única CPU usam algoritmos apropriados para dar tempo de CPU equitativo para os threads de modo a habilitar a simultaneidade.

Em um ambiente orientado a objetos, existem objetos ativos e inativos. Os objetos ativos têm threads de controle independentes que podem ser executados simultaneamente com threads de outros objetos. Os objetos ativos são sincronizados entre si e também com objetos puramente sequenciais.

Persistência

Um objeto ocupa um espaço de memória e existe por um determinado período de tempo. Na programação tradicional, o tempo de vida de um objeto era tipicamente o tempo de execução do programa que o criou. Em arquivos ou bancos de dados, a vida útil do objeto é maior do que a duração do processo de criação do objeto. Essa propriedade pela qual um objeto continua a existir mesmo depois que seu criador deixa de existir é conhecida como persistência.