OOAD - Principios orientados a objetos
Principios de los sistemas orientados a objetos
El marco conceptual de los sistemas orientados a objetos se basa en el modelo de objetos. Hay dos categorías de elementos en un sistema orientado a objetos:
Major Elements- Por mayor, se quiere decir que si un modelo no tiene ninguno de estos elementos, deja de estar orientado a objetos. Los cuatro elementos principales son:
- Abstraction
- Encapsulation
- Modularity
- Hierarchy
Minor Elements- Por menor se entiende que estos elementos son útiles, pero no parte indispensable del modelo de objetos. Los tres elementos menores son:
- Typing
- Concurrency
- Persistence
Abstracción
Abstracción significa centrarse en las características esenciales de un elemento u objeto en OOP, ignorando sus propiedades extrañas o accidentales. Las características esenciales son relativas al contexto en el que se utiliza el objeto.
Grady Booch ha definido la abstracción de la siguiente manera:
"Una abstracción denota las características esenciales de un objeto que lo distingue de todos los demás tipos de objetos y, por lo tanto, proporciona límites conceptuales claramente definidos, en relación con la perspectiva del espectador".
Example - Cuando se diseña una clase Alumno, se incluyen los atributos matrícula_numero, nombre, curso y dirección y se eliminan características como pulso_tamaño y tamaño_de_calzado, ya que son irrelevantes en la perspectiva de la institución educativa.
Encapsulamiento
La encapsulación es el proceso de vincular atributos y métodos dentro de una clase. A través del encapsulado, los detalles internos de una clase se pueden ocultar desde el exterior. La clase tiene métodos que proporcionan interfaces de usuario mediante las cuales se pueden utilizar los servicios proporcionados por la clase.
Modularidad
La modularidad es el proceso de descomponer un problema (programa) en un conjunto de módulos para reducir la complejidad general del problema. Booch ha definido la modularidad como:
"La modularidad es la propiedad de un sistema que se ha descompuesto en un conjunto de módulos cohesivos y poco acoplados".
La modularidad está intrínsecamente relacionada con la encapsulación. La modularidad se puede visualizar como una forma de mapear abstracciones encapsuladas en módulos físicos reales que tienen una alta cohesión dentro de los módulos y su interacción o acoplamiento entre módulos es bajo.
Jerarquía
En palabras de Grady Booch, "la jerarquía es la clasificación u orden de la abstracción". A través de la jerarquía, un sistema puede estar formado por subsistemas interrelacionados, que pueden tener sus propios subsistemas y así sucesivamente hasta que se alcancen los componentes del nivel más pequeño. Utiliza el principio de "divide y vencerás". La jerarquía permite la reutilización del código.
Los dos tipos de jerarquías en OOA son:
“IS–A” hierarchy- Define la relación jerárquica en herencia, mediante la cual de una superclase, se pueden derivar varias subclases que pueden tener nuevamente subclases y así sucesivamente. Por ejemplo, si derivamos una rosa de clase de una flor de clase, podemos decir que una rosa "es una" flor.
“PART–OF” hierarchy- Define la relación jerárquica en agregación por la cual una clase puede estar compuesta por otras clases. Por ejemplo, una flor se compone de sépalos, pétalos, estambres y carpelos. Se puede decir que un pétalo es una "parte de" una flor.
Mecanografía
Según las teorías del tipo de datos abstracto, un tipo es una caracterización de un conjunto de elementos. En OOP, una clase se visualiza como un tipo que tiene propiedades distintas de cualquier otro tipo. Escribir es la aplicación de la noción de que un objeto es una instancia de una sola clase o tipo. También obliga a que los objetos de diferentes tipos no puedan intercambiarse en general; y sólo se pueden intercambiar de manera muy restringida si es absolutamente necesario.
Los dos tipos de escritura son:
Strong Typing - Aquí, la operación sobre un objeto se verifica en el momento de la compilación, como en el lenguaje de programación Eiffel.
Weak Typing- Aquí, los mensajes se pueden enviar a cualquier clase. La operación se verifica solo en el momento de la ejecución, como en el lenguaje de programación Smalltalk.
Concurrencia
La concurrencia en los sistemas operativos permite realizar múltiples tareas o procesos simultáneamente. Cuando existe un solo proceso en un sistema, se dice que hay un solo hilo de control. Sin embargo, la mayoría de los sistemas tienen múltiples subprocesos, algunos activos, otros esperando CPU, algunos suspendidos y algunos terminados. Los sistemas con varias CPU permiten inherentemente subprocesos de control simultáneos; pero los sistemas que se ejecutan en una sola CPU utilizan algoritmos apropiados para dar un tiempo de CPU equitativo a los subprocesos para permitir la concurrencia.
En un entorno orientado a objetos, hay objetos activos e inactivos. Los objetos activos tienen subprocesos de control independientes que pueden ejecutarse simultáneamente con subprocesos de otros objetos. Los objetos activos se sincronizan entre sí y también con objetos puramente secuenciales.
Persistencia
Un objeto ocupa un espacio de memoria y existe durante un período de tiempo determinado. En la programación tradicional, la vida útil de un objeto era típicamente la vida útil de la ejecución del programa que lo creó. En archivos o bases de datos, la vida útil del objeto es mayor que la duración del proceso de creación del objeto. Esta propiedad por la cual un objeto continúa existiendo incluso después de que su creador deja de existir se conoce como persistencia.