jueves, 25 de agosto de 2016

Conceptualización de tecnologías orientado a objetos

Tecnológico de estudios superiores san Felipe del progreso

ANALISIS Y MODELADO DE SISTEMAS DE INFORMACION

Docente;
Ing. Alex Ramírez Galindo.

Alumnos;
Martin Anastasio Cruz.
Jasón Marín Antonio.
Emmanuel Maya García.

1.1 CONCEPTUALIZACIÓN DE TECNOLOGÍA ORIENTADA A OBJETOS

Ingeniería Informática
50I

San Felipe del Progreso México. a Agosto del 2016.
ÍNDICE
Introducción…………………………………………… 3

Desarrollo……………………………………………… 4

Cuadro Comparativo………………………………… 10

Conclusiones…………………………………………. 12

Referencias…………………………………………… 12









INTRODUCCIÓN
El modelo de proceso de software como la programación estructurada consta de múltiples datos y funciones globales. Todos los datos o funciones dentro de un programa son visibles. En nuestra actualidad la POO tiene un roll importante dentro de la programación, puesto que es una herramienta muy necesaria que ayuda a elaborar un programa u sistema determinando teniendo en cuenta las diferentes características que este debe de llevan, no dejando afuera las especificaciones que deben englobar dicho programa.
En este documento veremos brevemente los conceptos básicos de la programación orientada a objetos desde un punto de vista global, sin particularizar para ningún lenguaje de programación específico.
Es muy importante destacar que cuando hacemos referencia a la programación orientada a objetos no estamos hablando de unas cuantas características nuevas añadidas a un lenguaje de programación. Estamos hablando de una nueva forma de pensar acerca del proceso de descomposición de problemas y de desarrollo de soluciones de programación. La programación orientada a objetos surge en la historia como un intento para dominar la complejidad que, de forma innata, posee el software. Tradicionalmente, la forma de enfrentarse a esta complejidad ha sido empleando lo que llamamos programación estructurada, que consiste en descomponer el problema objeto de resolución en subproblemas y más subproblemas hasta llegar a acciones muy simples y fáciles de codificar.





Conceptualización de tecnología orientada a objetos

La Tecnología Orientada a Objetos es un nuevo enfoque sobre la manera de organizar las diferentes piezas que componen un sistema de información (software), como en el hardware (equipo físico), la base de datos e incluso, en organizaciones todas estas piezas se denominan "objetos", los cuales son pequeños subsistemas independientes con datos propios sobre estos elementos y sus clases y tipos, rigen tales propiedades como herencia, comunicación con lenguajes, polimorfismos y otros que en conjunto permiten ventajas prácticas.
Estas están incluidas en las versiones orientadas a objetos de metodología para análisis y diseño de programación y base de datos. Con esto, nos hemos referido a la tecnología orientada a objetos aplicada a software. Sin embargo este enfoque también es aplicado en la construcción de hardware, así como también es válido en el diseño organizativo.
La Tecnología Orientada a Objetos se apoya en fundamentos de la ingeniería, cuyos elementos reciben el nombre global de modelo de objetos, el cual abarca los principios de abstracción, encapsulación, modularidad, jerarquía, concurrencia y persistencia.
En la programación tradicional, también conocida como programación estructurada, un programa o aplicación consta de múltiples datos y funciones
“globales”. El término “global” describe el hecho que todos los datos o funciones son “visibles” en todo el programa y, por lo tanto pueden ser llamados desde cualquier ubicación en la aplicación. Esta forma de programación tiene sus orígenes en las primeras computadoras modernas basadas en la arquitectura Von Neuman de 1945 donde las instrucciones de un programa se guardaban en memoria creando el concepto de programa almacenado. Las instrucciones de un programa definidas dentro defunciones o procedimientos, eran ejecutadas por el procesador de manera secuencial afectando los datos del programa, los cuales eran almacenados en otras secciones de la memoria. Esta arquitectura es similar a la que actualmente se usa en la mayoría de las computadoras personales. Debido a esta separación de funciones y datos en la memoria, se ha desarrollado un gran número de lenguajes de programación que explotan este concepto.

¿QUÉ ES UN OBJETO?

Un objeto no es más que un conjunto de variables (o datos) y métodos (o funciones) relacionados entre sí. Los objetos en programación se usan para modelar objetos o  entidades del mundo real (el objeto hijo, madre, o farmacéutica, por ejemplo). Un objeto es, por tanto, la representación en un programa de un concepto, y contiene toda la información necesaria para abstraerlo: datos que describen sus atributos y operaciones que pueden realizarse sobre los mismos.
Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa).

¿QUÉ ES UN MENSAJE?

Normalmente un único objeto por sí solo no es muy útil. En general, un objeto aparece como un componente más de un programa o una aplicación que contiene otros muchos objetos.
 Es precisamente haciendo uso de esta interacción como los programadores consiguen una funcionalidad de mayor orden y modelar comportamientos mucho más complejos.




¿QUÉ ES UNA CLASE?

Normalmente en el mundo real existen varios objetos de un mismo tipo, o como  diremos enseguida, de una misma clase. Por ejemplo, mi bicicleta es una de las muchas bicicletas que existen en el mundo. Usando la terminología de la programación Orientada a objetos, diremos que mi bicicleta es una instancia de la clase de objetos conocida como bicicletas.
Todas las bicicletas tienen algunos estados o atributos (color, marcha actual, cadencia actual, dos ruedas) y algunos métodos (cambiar de marcha, frenar) en común. Sin embargo, el estado particular de cada bicicleta es independiente del estado de las demás bicicletas.

Una clase es una plantilla que define las variables y los métodos que son comunes para todos los objetos de un cierto tipo de mecanismo de herencia permiten definir nuevas clases partiendo de otras ya existentes.
Las clases que derivan de otras heredan automáticamente todo su comportamiento, pero además pueden introducir características particulares propias que las diferencian.

¿QUÉ ES UNA HERENCIA?

Consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). La subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase.
Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como “privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

ENVÍO DE MENSAJES
Es la comunicación dirigida a un objeto. El medio para interactúe con otro son los mensajes «invocaciones a los métodos de los objetos».
Los objetos interactúan enviándose mensajes unos a otros. Tras la recepción de un mensaje el objeto actuará. La acción puede ser el envío de otros mensajes, el cambio de su estado, o la ejecución de cualquier otra tarea que se requiera que haga el objeto. 

LA ABSTRACCIÓN

Consiste en captar las características esenciales de un objeto, así como su comportamiento. Volviendo a lo anterior de la relación de herencia entre clases, se puede pensar en una jerarquía de clase como la definición de conceptos demasiado abstractos en lo alto de la jerarquía y esas ideas se convierten en algo más concreto conforme se desciende por la cadena de la superclase.
Sin embargo, las clases hijas no están limitadas al estado y conducta provistos por sus superclases; pueden agregar variables y métodos además de los que ya heredan de sus clases padres. Las clases hijas pueden, también, sobrescribir los métodos que heredan por implementaciones especializadas para esos métodos. De igual manera, no hay limitación a un sólo nivel de herencia por lo que se tiene un árbol de herencia en el que se puede heredar varios niveles hacia abajo y mientras más niveles descienda una clase, más especializada será su conducta.
La herencia presenta los siguientes beneficios: Las subclases proveen conductas especializadas sobre la base de elementos comunes provistos por la superclase. A través del uso de herencia, los programadores pueden reutilizar el código de la superclase muchas veces.
Los programadores pueden implementar superclases llamadas clases abstractas que definen conductas "genéricas". Las superclases abstractas definen, y pueden implementar parcialmente, la conducta pero gran parte de la clase no está definida ni implementada. Otros programadores concluirán esos detalles con subclases especializadas.
ENCAPSULAMIENTO

Es el mecanismo básico de la POO para ocultar los detalles internos del objeto de los demás objetos.
Consiste en unir en la Clase las características y comportamientos, esto es, los atributos y métodos. Es tener todo esto es una sola entidad. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento.
Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa.
El encapsulamiento de variables y métodos en un componente de software ordenado es, todavía, una simple idea poderosa que provee dos principales beneficios a los desarrolladores de software:
Modularidad, esto es, el código fuente de un objeto puede ser escrito, así como darle mantenimiento, independientemente del código fuente de otros objetos. Así mismo, un objeto puede ser transferido alrededor del sistema sin alterar su estado y conducta.


OCULTAMIENTO
Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer sólo los detalles que sean necesarios para el resto del sistema.
Ocultamiento de la información, es decir, un objeto tiene una "interfaz publica" que otros objetos pueden utilizar para comunicarse con él. Pero el objeto puede mantener información y métodos privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros objetos que dependan de ello.
Los objetos proveen el beneficio de la modularidad y el ocultamiento de la información. Las clases proveen el beneficio de la reutilización. Los programadores de software utilizan la misma clase, y por lo tanto el mismo código, una y otra vez para crear muchos objetos.

POLIMORFISMO
Un objeto solamente tiene una forma (la que se le asigna cuando se construye ese objeto) pero la referencia a objeto es polimórfica porque puede referirse a objetos de diferentes clases (es decir, la referencia toma múltiples formas). Para que esto sea posible debe haber una relación de herencia entre esas clases.
Una de las características fundamentales de la OOP es el polimorfismo, que no es otra cosa que la posibilidad de construir varios métodos con el mismo nombre, pero con relación a la clase a la que pertenece cada uno, con comportamientos diferentes. Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes.







Conceptualización de tecnologías orientada a objetos
Existe un acuerdo acerca de qué características contempla la "orientación a objetos", las características siguientes son las más importantes:
Abstracción:
Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción. El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.
Encapsulamiento:
Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Modularidad:
Se denomina Modularidad a la propiedad que permite subdividir una aplicación en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicación en sí y de las restantes partes. Estos módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al igual que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.
Polimorfismo:
La habilidad de tomar varias formas, en java es la habilidad de una variable por referencia de cambiar su comportamiento en función de que instancia de objeto posee. Esto permite tratar de la misma manera, como objetos de la superclase, a múltiples objetos de la subclase, seleccionado en cada caso los métodos apropiados.
Herencia:
Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y estas en árboles o enrejados que reflejan un comportamiento común. Cuando un objeto hereda de más de una clase se dice que hay herencia múltiple.
Recolección de basura:
la recolección de basura o garbage collector (basurero) es la técnica por la cual el entorno de objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que el programador no debe preocuparse por la asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando















CONCLUSIONES

El análisis y comprensión del tema nos da una panorámica más entendible de cómo funciona la programación orientada a objetos y de cuáles son los requerimientos que necesita como lo son; objeto, clase, herencia etc. Lo cual nos da a  entender que un objeto es una abstracción conceptual del mundo real que se puede traducir a un lenguaje de POO y que objeto del mundo real tiene atributos y comportamientos, al igual que un objeto del mundo del software.
Y una clase es una plantilla que define las variables y métodos a ser incluidas en un tipo de objeto específico. Los objetos también son llamados instancias de la clase y se pueden  comunican entre ellos usando los mensajes. Un mensaje es la invocación de un método del objeto.



BIBLIOGRAFÍAS

Morales, J. (2014) Conceptualización de tecnología orientada a objetos y programación tradicional, pág. (1,14).
Flores Bernal. HECTOR R. (2015) Conceptualización de tecnología orientada a objetos, pág. (1,63).
Pressman, Roger S, (2015) Ingeniería del software un enfoque práctico, editorial Mc Graw Hill, séptima edición, pág. (1,63).