Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Así pues, la programación orientada a objetos es una forma de programar que trata de
encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y
amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:
Clase
Herencia
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.
Objeto
Método
Evento
Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un
mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. También se puede definir como evento, a la reacción que
puede desencadenar un objeto, es decir la acción que genera.
Mensaje
Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos
con ciertos parámetros asociados al evento que lo generó.
Propiedad o atributo
Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que
hace los datos visibles desde fuera del objeto y esto se define como sus características
predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.
Estado interno
Es una variable que se declara privada, que puede ser únicamente accedida y
alterada por un método del objeto, y que se utiliza para indicar distintas situaciones
posibles para el objeto (o clase de objetos). No es visible al programador que maneja una
instancia de la clase.
Componentes de un objeto
Identificación de un objeto
Un objeto se representa por medio de una tabla o entidad que esté compuesta por sus
atributos y funciones correspondientes. En comparación con un lenguaje imperativo, una
"variable", no es más que un contenedor interno del atributo del objeto o de un estado
interno, así como la "función" es un procedimiento interno del método del objeto.
La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de
objetos, siendo responsable cada clase de objetos de definir sus propios datos y
comportamientos. Fueron refinados más tarde en Smalltalk, que fue desarrollado en
Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para
ser un sistema completamente dinámico en el cual los objetos se podrían crear y
modificar "en marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en
programas estáticos.
UML usa las fortalezas de estos tres enfoques para presentar una metodología
más uniforme que sea más sencilla de usar. UML representa buenas prácticas para la
construcción y documentación de diferentes aspectos del modelado de sistemas de
software y de negocios.
UML usa elementos y los asocia de diferentes formas para formar diagramas que
representan aspectos estáticos o estructurales de un sistema, y diagramas de
comportamiento, que captan los aspectos dinámicos de un sistema.
POO
Simula 67
El primer lenguaje orientado a objetos es el Simula 67, fue desarrollado por los
noruegos: Krinsten Nygaard y Ole-Johan Dahl y fue presentado en el año 1967.
Simula 67 fue primer lenguaje que presentó las nociones de clase y herencia
jerárquica. No se admite la herencia múltiple. El ocultamiento de información se lleva a
cabo “protegiendo” una característica, lo cual, a su vez, evita que sea heredada en lo
sucesivo. Admite la sobrecarga de métodos. La comprobación de tipos se puede realizar,
bien estáticamente en el momento de la compilación, para mayor eficiencia, o bien en el
momento de la ejecución si se define una característica como “virtual”.
Smalltalk
A principio de los años 70 ' en el centro de investigación "Palo Alto Xerox " crearon
Smalltalk fue el primer lenguaje Orientado a Objetos puro de los lenguajes Orientados a
Objetos, es decir, únicamente utiliza clases y objetos
Los objetos Smalltalk presentan características comunes:
C++
C++ es un lenguaje de programación creado por Bjarne Stroustrup en 1983.
Stroustrup tomó como base el lenguaje de programación más popular en aquella época el
cual era C (diseñado en 1971 por Dennis Ritchie Ken Thompson basados B y BCPL) al
que le añadió cualidades y características de las que carecía.
Características
Tiene un conjunto completo de instrucciones de control.
Permite la agrupación de instrucciones.
Incluye el concepto de puntero (variable que contiene la dirección de otra variable).
Los argumentos de las funciones se transfieren por su valor.
E/S no forma parte del lenguaje, sino que se proporciona a través de una
biblioteca de funciones.
Permite la separación de un programa en módulos que admiten compilación
independiente.
Eiffel
Eiffel es un lenguaje de programación orientado a objetos diseñado por Bertrand
Meyer en 1985. Este lenguaje dispone de diseño por contrato que facilita la detección de
errores y la depuración de códigos .Las clases son la unidad básica, su gestión de
memoria es automática y es implementada por el recolector de basura.
Small Eiffel
ISE Eiffel
Visual Eiffel
Delphi
El desarrollo de Borland Delphi se inició en 1993, y Delphi 1.0 fue lanzado oficialmente
en los Estados Unidos el 14 de febrero de 1995. Delphi presentó una nueva sintaxis
usando la palabra clave "class" en lugar de "object", el constructor" Create" y un
destructor virtual "Destroy " (no teniéndose así que llamar a "New" ni a" Dispose"), las
propiedades, los punteros de método, y algunas otras cosas; y al mismo tiempo mantenía
compatibilidad con la anterior sintaxis (permitiendo migración).
Java
Es un lenguaje de programación orientado a objetos que fue creado en 1995 (es una
extensión de C++) se popularizo en 1996 por su lanzamiento comercial de su primera
versión, la JDK 1.0 en Java todos los tipos, a excepción de los tipos fundamentales de
variables (int, char, long...) son clase
Posee todos los conceptos en los que se basa la programación orientada a objetos,
como la herencia polimorfismo, encapsulamiento, entre otras cosas.
Java proporciona una colección de clases para su uso en aplicaciones de red, que
permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes
remotos, facilitando así la creación de aplicaciones distribuidas .
La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de éste, que
combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java
fue construido desde el principio para ser completamente orientado a objetos. Todo en
Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase
C#
Es un lenguaje de programación orientado a objetos desarrollado y estandarizado por
Microsoft como parte de su plataforma .Net. Este lenguaje fue creado al principio de los
2000 por Microsoft. Con el C# se pretendió incorporar las ventajas o mejoras que tiene el
lenguaje JAVA. Así se consiguió que tuviese las ventajas del C,del C++, pero además la
productividad que posee el lenguaje JAVA y se le denomino C#
C# utiliza plantillas de proyecto, diseñadores, páginas de propiedades, asistentes de
código, un modelo de objetos y otras características del entorno de desarrollo.
C# es simple, eficaz, con seguridad de tipos y orientado a objetos. Las numerosas
innovaciones de C# permiten desarrollar aplicaciones rápidamente y mantener la
expresividad y elegancia de los lenguajes de estilo de C.
Una variable de objeto de cierta clase no almacena los valores del objeto sino su
referencia (al igual que Java).
El operador de asignación no copia los valores de un objeto, sino la referencia al
mismo (al igual que Java).
Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a
un método.
La palabra clave this es una referencia al mismo objeto en el cual se usa.
Tiene la Capacidad para desarrollar componentes de software que se puedan usar
en ambientes distribuidos.
Su código fuente es portable
ABAP
ABL
ActionScript
ActionScript 3
C Sharp (C#)
Clarion
Clipper
D
Object Pascal (Embarcadero Delphi)
Gambas
GObject
Genie
Harbour
Eiffel
Fortran 90/95
Java
JavaScript
Lexico
Objective-C
Ocaml
Oz
R
Pauscal (en español)
Perl
Perl 6
PHP
PowerScript
Processing.
Python
Ruby
Self
Smalltalk
Swift
Magik
Vala
VB.NET
Visual FoxPro
Visual Basic 6.0
Visual DataFlex
Visual Objects
XBase++
DRP
Scala
Al igual que C++, otros lenguajes, como OOCOBOL, OOLisp, OOProlog y Object
REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de
programación clásico.
CARACTERÍSTICAS Y FUNDAMENTOS:
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 todos los elementos que pueden considerarse pertenecientes a una
misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión (diseño
estructurado) de los componentes del sistema. Algunos autores confunden este concepto
con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.
Polimorfismo
Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo
nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al
objeto que se esté usando. O, dicho de otro modo, las referencias y las colecciones de
objetos pueden contener objetos de diferentes tipos, y la invocación de un
comportamiento en una referencia producirá el comportamiento correcto para el tipo real
del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última
característica se llama asignación tardía o asignación dinámica. Algunos lenguajes
proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales
como las plantillas y la sobrecarga de operadores de C++.
Herencia
Las clases no se encuentran 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; siendo de alta complejidad técnica por lo cual suele recurrirse a la
herencia virtual para evitar la duplicación de datos.
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.
Principio de ocultación
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto
expone una "interfaz" a otros objetos que específica cómo pueden interactuar con los
objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su
modificación por quien no tenga derecho a acceder a ellas; solamente los propios
métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos
no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando
efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto,
permitiendo un acceso directo a los datos internos del objeto de una manera controlada y
limitando el grado de abstracción. La aplicación entera se reduce a un agregado
o rompecabezas de objetos.
Recolección de basura
La recolección de basura (garbage collection) 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. En
la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de
Programación Orientada a Objetos como C++ u Object Pascal, esta característica no
existe y la memoria debe desasignarse expresamente.
CLASES Y OBJETOS:
Objetos
El estado de un objeto abarca todas las propiedades del objeto, y los valores actuales
de cada una de esas propiedades. Las propiedades de los objetos suelen ser estáticas,
mientras los valores que toman estas propiedades cambian con el tiempo.
El hecho de que los objetos tengan estado implica que ocupan un espacio, ya en
el mundo físico, ya en la memoria del ordenador.
El estado de un objeto está influido por la historia del objeto.
No deben confundirse los objetos, que existen en el tiempo, son mutables, tienen
estado, pueden ser creados, destruidos y compartidos..., con los valores (los
asignados a una variable, por ejemplo) que son cantidades con las propiedades de
ser atemporales, inmutables.
El estado de un objeto representa el efecto acumulado de su comportamiento.
Identidad de un objeto
Comportamiento de un objeto
Clases
Todo objeto es el ejemplo de una clase, y toda clase tiene 0 o más objetos.
Mientras las clases son estáticas, con semántica, relaciones y existencia fijas
previamente a la ejecución de un programa, los objetos se crean y destruyen
rápidamente durante la actividad de una aplicación. El diseño de clases y objetos
es un proceso incremental e interactivo. De asegurar la optimización en los
parámetros:
ÁMBITOS DE CLASES
Una clase es una colección de elementos (miembros) junto con las operaciones
que se realizan con ellos. El término ámbito de clase se aplica a los nombres de los
miembros de una clase particular. Las clases y sus miembros tienen reglas de acceso y
de ámbito muy especiales. El nombre N de un miembro de una clase C tiene ámbito “local
a C”, y puede ser utilizado solo en las siguientes situaciones: En funciones miembro
(métodos) de C. En expresiones tales como c.N, donde c es un objeto de C (Selector
directo de miembro) En expresiones tales como cptr->N, donde cptr es un puntero a una
instancia de C (Selector indirecto de miembro) En expresiones tales como C::N o D::N,
donde D es una clase derivada de C. En referencias anticipadas de miembros dentro de la
clase.