Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Han existido dos grandes cambios desde aquellos sistemas meramente algorítmicos
donde todo el esfuerzo de desarrollo se centraba en la escritura de programas que realizaran
algún tipo de cálculo. El primero de ellos es la aparición del modelo relacional, un modelo
con fuerte base matemática que supuso el desarrollo las bases de datos y propició la
aparición de los grandes sistemas de información. El segundo cambio es sobre los
lenguajes de programación, la aparición de los Lenguajes Orientados a Objetos (aunque
los primero lenguajes con características de orientación a objetos aparecieron en la década
de los setenta, por ejemplo Simula 67) supuso una revolución en la industria software.
Modelado
Para producir software que cumpla su propósito hay que obtener los requisitos del
sistema, esto se consigue conociendo de una forma disciplinada a los usuarios y
haciéndolos participar de manera activa para que no queden “cabos sueltos”.
Para conseguir un software de calidad, que sea duradero y fácil de mantener hay que
idear una sólida base arquitectónica que sea flexible al cambio. Para desarrollar software,
rápida y eficientemente, minimizando el trabajo de recodificación y evitando crear miles de
líneas de código inútil hay que disponer, además de la gente y las herramientas necesarias,
de un enfoque apropiado.
Orientación a Objetos
La programación estructurada tradicional se basa fundamentalmente en la ecuación
de Wirth:
Algoritmos + Estructuras de Datos = Programas
Estas ventajas son directas a los programadores. Estos, se podría decir, que son los
ejecutores de un determinado proyecto software. Pero la orientación a objetos no sólo
reporta beneficios a los programadores. En las etapas de análisis, previas a la codificación,
el utilizar un modelado orientado a objetos reporta grandes beneficios ya estas mismas
ventajas son aplicables a todas las fases del ciclo de vida de un proyecto software.
En este proceso de abstracción se considera que el resto de las partes ya han sido
resueltas y por lo tanto pueden servir de apoyo para resolver la parte
que recibe la atención.
2. Clase y objeto
Los objetos son las entidades básicas del modelo de objeto. La palabra objeto
proviene del latín objectus, donde ob significa hacía, y jacere significa arrojar; o sea que
teóricamente un objeto es cualquier cosa que se pueda arrojar.
Ejemplo: Una pelota o un libro se pueden arrojar, por lo tanto estos son objetos. Por
otro lado, un avión o un elefante también se consideran objetos, aunque sean bastante
pesados para ser arrojados.
Los objetos son más que simples cosas que se puedan arrojar, son conceptos
pudiendo ser abstractos o concretos.
Ejemplo: Mesa y viaje son ambos sustantivos y por lo tanto objetos. Trabajando y
estudiando son gerundios por lo cual no se consideran objetos.
Un objeto debe tener una identidad coherente, al que se le puede asignar un nombre
razonable y conciso.
Ejemplo: Se consideran manzanas todas las frutas con un sabor, textura, y forma
similar.
La existencia de un objeto depende del contexto del problema. Lo que puede ser un
objeto apropiado en una aplicación puede no ser apropiado en otra, y al revés. Por lo
general, existen muchos objetos en una aplicación, y parte del desafío es encontrarlos.
Ejemplo: Una persona llamada Juan Pérez se considera un objeto para una
compañía, mientras que para un laboratorio el hígado de Juan Pérez es un objeto. Una
universidad como la BUAP se considera un objeto, mientras que dentro de la BUAP los
objetos serían las aulas, los estudiantes y los profesores.
Los objetos deben ser entidades que existen de forma independiente. Se debe
distinguir entre los objetos, los cuales contienen características o propiedades, y las propias
características.
Un grupo de cosas puede ser un objeto si existe como una entidad independiente.
Los objetos deben tener nombren razonables y concisos para evitar la construcción
de objetos que no tengan una identidad coherente.
Ejemplo: Datos o información no son nombres concisos de objetos. Por otro lado,
un estudiante es un objeto, ya que contiene propiedades como el número de matrícula y
nombre del estudiante, además incluye un comportamiento tal como ir a clases, presentar
exámenes, y graduarse. Todos los estudiantes cuyos apellidos comiencen con "A" sería un
mal objeto ya que el nombre del objeto no es conciso.
Una clase como la hemos definido se conoce también como clase básica.
Las relaciones entre clases juegan un papel importante en el modelo de objetos. Las
clases, al igual que los objetos, no existen de modo aislado. Por esta razón existirán
relaciones entre clases y entre objetos.
Las relaciones entre clases, se deben a dos razones. La primera, una relación entre
clases puede indicar algún tipo de compartición (por ejemplo margaritas y rosas son ambas
tipos de flores). Segunda, una relación entre clases puede indicar algún tipo de conexión
semántica; por ejemplo, las rosas rojas y amarillas, son más parecidas entre sí que las
margaritas y las rosas.
Animal
Mamífero
Reptil
Herencia es la propiedad por la cual instancias de una clase hija (o subclase) puede
acceder tanto a datos como a comportamientos (métodos) asociados con una clase padre (o
superclase). La herencia siempre es transitiva, de modo que una clase puede heredar
características de superclases de nivel superior. Esto es, si la clase perro es una subclase de
mamífero y de animal.
Una vez que la jerarquía se ha establecido es fácil extenderla. Para describir sus
diferencias a partir de un concepto de una jerarquía existente. La herencia significa que el
comportamiento y los datos asociados con las clases hijas son siempre una extensión de las
propiedades asociadas con las clases padres. Una subclase debe tener todas las propiedades
de la clase padre y otras.
Una superclase representa una generalización de las subclases. De igual modo, una
subclase de una clase dada representa una especialización de la clase superior. La clase
derivada es-un tipo de la clase base o superclase.
Agregación
Una agregación es una relación que representa a los objetos compuestos. Un objeto
es compuesto si se compone a su vez de otros objetos. Una casa se compone de
habitaciones, tejados, suelos, ventanas, etc. Una habitación a su vez, se compone de
paredes, techos, suelo, ventanas y puertas.
Casa
tiene tiene
tiene
Habitación Tejados
tiene tiene
tiene tiene
La agregación puede ser de dos tipos, por contenido físico o por contenido por
referencia o conceptual.
Coche
Parte-de Parte-de
Parte-de Parte-de
Compañía Edificio
Departa-
División
mento
Sección Oficina
Trabaja-para
Juan Pérez IBM
Las asociaciones pueden ser unitarias, binarias, ternarias o de cualquier otro orden,
aunque la mayoría serán binarias. Una propiedad importante intrínseca a la relación de
asociación o multiplicidad es la cardinalidad o multiplicidad. La multiplicidad es la
propiedad que expresa el número de instancias de una clase que se asocian o conectan con
instancias de la clase asociada. Existen tres tipos de multiplicidad o cardinalidad:
Una a una
Una a muchas
Muchas a muchas
Una relación una a una implica una relación estrecha entre objetos. Por ejemplo, una
relación entre una clase venta de un producto y la clase operaciónTD que representa la
operación o pago de la venta mediante una tarjeta de crédito. Cada venta se corresponde
con una operación de una tarjeta de crédito y a la inversa. Otro ejemplo es la relación entre
País y Capital. Un país tiene una capital y sólo una, y una ciudad que es capital de un país
sólo pertenece a un país.
Una relación una a muchas se puede ver entre las clases País y Ciudad. Un país
tiene muchas ciudades, mientras que una ciudad sólo pertenece a un país. Otro ejemplo se
da entre la clase Línea, Circunferencia, o en general Figura y la clase Punto. Cualquier
figura puede tener muchos puntos, y un punto se asocia a una figura.
Las clases Ventas y Artículo se enlazan también por una relación una a muchas.
Una venta puede constar de muchos artículos.
Por último, la multiplicidad muchas a muchas, implica que una instancia de una
clase puede corresponder con muchas instancias de otra clase, y viceversa. Las clases
Estudiante y Asignatura están relacionadas con asociaciones de multiplicidad muchas a
muchas. Un estudiante puede estar inscrito en muchas asignaturas, y en una asignatura
determinada pueden estar inscritos muchos alumnos.
una a muchas
opcionalidad
una a muchas
una a una
4. Polimorfismo
La palabra polimorfismo proviene del griego, y significa que posee varias formas
diferentes. Este es uno de los conceptos esenciales de una programación orientada a
objetos. Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo
se relaciona con los métodos.
Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition()
efectuando una suma de valores.
La habilidad para redefinir un método en clases que se hereda de una clase base se
llama especialización. Por lo tanto, se puede llamar un método de objeto sin tener que
conocer su tipo intrínseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta
detalles de las clases especializadas de una familia de objetos, enmascarándolos con una
interfaz común (siendo esta la clase básica).
Imagine un juego de ajedrez con los objetos rey, reina, alfil, caballo, torre y peón,
cada uno heredando el objeto pieza.
5. Encapsulamiento
El usuario de una clase en particular no necesita saber cómo están estructurados los
datos dentro de ese objeto, es decir, un usuario no necesita conocer la implementación Al
evitar que el usuario modifique los atributos directamente y forzándolo a utilizar funciones
definidas para modificarlos (llamadas interfaces), se garantiza la integridad de los datos
(por ejemplo, uno puede asegurarse de que el tipo de datos suministrados cumple con
nuestras expectativas bien que los se encuentran dentro del periodo de tiempo esperado).
La encapsulación define los niveles de acceso para elementos de esa clase. Estos
niveles de acceso definen los derechos de acceso para los datos, permitiéndonos el acceso a
datos a través de un método de esa clase en particular, desde una clase heredada o incluso
desde cualquier otra clase. Existen tres niveles de acceso:
público: funciones de toda clase pueden acceder a los datos o métodos de una clase
que se define con el nivel de acceso público. Este es el nivel de protección de datos
más bajo
protegido: el acceso a los datos está restringido a las funciones de clases heredadas,
es decir, las funciones miembro de esa clase y todas las subclases
privado: el acceso a los datos está restringido a los métodos de esa clase en
particular. Este es nivel más alto de protección de datos
Hacer las variables que son innecesarias para el tratamiento del objeto pero
necesarias para su funcionamiento privadas, así como las funciones que no necesitan
interacción del usuario o que solo pueden ser llamadas por otras funciones dentro del objeto
(Como por ejemplo, palpitar)