Logo Studenta

RESUMEN PARCIAL PROGRAMACION II

¡Este material tiene más páginas!

Vista previa del material en texto

Listas Enlazadas
Una lista enlazada o encadenada es un conjunto de elementos en los que cada elemento contiene la posición o dirección del siguiente elemento de la lista. 
Las listas enlazadas tienen una terminología propia que se suele utilizar normalmente. Los valores se almacenan en un nodo. 
Los componentes de un nodo se llaman campos. 
Cada elemento de la lista enlazada debe tener al menos dos campos: un campo que tiene el valor del elemento y un campo (link) que contiene la posición del siguiente elemento, es decir, su conexión, enlace o encadenamiento (indicador o puntero). Los elementos de una lista son enlazados por medio de los campos enlaces. 
En las listas enlazadas no es necesario que los elementos de la lista sean almacenados en posiciones físicas adyacentes, ya que el puntero indica dónde se encuentra el siguiente elemento de la lista 
El último nodo de la lista enlazada, por convenio, se suele representar por un enlace con la palabra reservada nil (nulo) una barra inclinada (/) y, en ocasiones, el símbolo eléctrico de tierra o masa. 
Por consiguiente, la inserción y borrado no exigen desplazamiento como en el caso de las listas contiguas. 
Una lista enlazada sin ningún elemento se llama lista vacía. Su puntero inicial o de cabecera tiene el valor nulo nil.
Listas circulares 
Las listas simplemente enlazadas no permiten a partir de un elemento acceder directamente a cualquiera de los elementos que le preceden En lugar de almacenar un puntero NULO en el campo SIG del último elemento de la lista, se hace que el último elemento apunte al primero o principio de la lista Este tipo de estructura se llama lista enlazada circular o simplemente lista circular (en algunos textos se les denomina listas en anillo). 
Listas Doblemente Enlazadas 
Se puede recorrer la lista en ambos sentidos. 
Lista Pila LIFO (último en entrar, primero en salir) 
Una pila (stack) es un tipo especial de lista lineal en la que la inserción y borrado de nuevos elementos se realiza sólo por un extremo que se denomina cima o tope (top). Las operaciones más utilizadas en una pila son: 
∙ Push: permite insertar un elemento a la pila. 
∙ Pop: permite eliminar un elemento de la pila. 
Las pilas se utilizan para solucionar una amplia variedad de problemas. 
Una de las aplicaciones son las llamadas a subprogramas. 
Lista Cola FIFO (primero en entrar, primero en salir) 
Las colas son otro tipo de estructura lineal de datos similar a las pilas, diferenciándose de ellas en el modo de insertar/eliminar elementos. 
Las eliminaciones se realizan al principio de la lista, frente (front), y las inserciones se realizan en el otro extremo, final (rear). 
Las colas se usan para almacenar datos que necesitan ser procesados según el orden de llegada.
La implementación en un lenguaje de programación tanto de pilas, colas y listas depende de si el lenguaje utiliza o no punteros, si el mismo no utiliza punteros se manejan con arrays. 
TIPOS ABSTRACTOS DE DATOS 
Un TAD se compone de estructuras de datos y los procedimientos o funciones (métodos en POO) que manipulan esas estructuras de datos
TAD = Representación (datos) + Operaciones (funciones, procedimientos, métodos) 
PROGRAMACION ORIENTADA A OBJETOS (POO)
PROGRAMACION ESTRUCTURADA (PROCEDIMENTAL) 
Cuando los programas se vuelven más complejos, la lista de instrucciones se vuelve grande e inmanejable. 
En este caso el programa se rompe en unidades más pequeñas que se hagan más comprensibles a las personas que lo utilizan Estas unidades se denominan funciones, subrutinas, procedimientos o subprogramas. 
La división de un programa en funciones y módulos es una de las características fundamentales de la programación estructurada y que facilita la lectura y comprensión del programa. La programación estructurada utiliza fundamentalmente instrucciones: 
∙ secuenciales, 
∙ de selección (if-then, case) 
∙ y repetitivas (for, while, repeat) 
Para facilitar la realización de tareas secuenciales, selectivas o de decisión y repetitivas o iterativas. 
LIMITACIONES DE LA PROGRAMACION ESTRUCTURADA (PROCEDIMENTAL) 
Cuando el problema a resolver es complejo, la programación se hace difícil y excesivamente compleja. 
Las dificultades provienen sobre las funciones que tienen acceso ilimitado a datos globales y además el paradigma o enfoque procedimental proporciona un modelo pobre del mundo real. La programación estructurada mejora la claridad, fiabilidad y facilidad de mantenimiento de los programas; sin embargo, para programas grandes o a gran escala, presentan retos de difícil solución, que pueden ser resueltos más fácilmente mediante programación orientada a objetos. POO 
La Programación Orientada a Objetos (POO) es un enfoque conceptual específico para diseñar programas, utilizando un lenguaje de programación orientado a objetos. 
Las propiedades más importantes de la POO son: 
• Abstracción. 
• Herencia. 
• Encapsulamiento y ocultación de datos. 
• Polimorfismo. 
• Reusabilidad o reutilización de código.
Este paradigma de programación viene a superar las limitaciones de la programación tradicional o "estructurada/procedimental”. 
Los elementos fundamentales de la POO son las clases y objetos. En esencia, la POO se concentra en el objeto tal como lo percibe el usuario, pensando en los datos que se necesitan para describir el objeto y las operaciones que describirán la iteración del usuario con los datos. Después se desarrolla una descripción de la interfaz externa y se decide cómo implementar la interfaz y el almacenamiento de datos Por último, se ponen juntos en un programa que utilice su nuevo dueño. 
En este texto nos limitaremos al campo de la programación, pero es también posible hablar de sistemas de administración de bases de datos orientadas a objetos, sistemas operativos orientados a objetos, interfaces de usuarios orientadas a objetos, etc. 
Analicemos la definición 
∙ Utiliza objetos, no algoritmos. 
∙ Cada objeto es una instancia de una clase. 
∙ Las clases se relacionan unas con otras por medio de relaciones de herencia. ∙ La POO es un conjunto de técnicas de programación que nos permiten desarrollar y mantener mucho más fácilmente programas de una gran complejidad. 
∙ El desarrollo de programas es mucho más eficiente. 
∙ Los objetos son los elementos principales de construcción. 
∙ Aclaremos la diferencia entre técnica y lenguaje de programación. Una técnica de programación no es un lenguaje, pero puede aplicarse a cualquier lenguaje. Podemos definirlo como un conjunto de reglas a seguir para hacernos la tarea de programar más fácil. Son consejos de expertos programadores, que tras años de trabajo, han acumulado una gran experiencia. Pero estas técnicas son independientes del lenguaje en que trabajemos. 
Si tenemos un coche y queremos que sea más rápido, no construimos un coche nuevo simplemente le cambiamos el carburador por otro más potente, cambiamos las ruedas por otras más anchas para conseguir mayor estabilidad y le añadimos un sistema turbo Pero seguimos usando todas las otras piezas de nuestro coche. 
Desde el punto de vista de la POO ¿Qué hemos hecho? 
Hemos modificado dos cualidades de nuestro objeto (métodos): el carburador y las ruedas. Hemos añadido un método nuevo: el sistema turbo. 
En programación tradicional, nos hubiésemos visto obligados a construir un coche nuevo por completo.
En POO si queremos construir un objeto que comparte ciertas cualidades con otro que ya tenemos creado, no tenemos que volver a crearlo desde el principio; simplemente, decimos qué queremos usar del antiguo en el nuevo y qué nuevas características tiene nuestro nuevo objeto. 
Con POO también podemos incorporar objetos que otros programadores han construido en nuestros programas. Pero, es que además podemos modificar los comportamientos de los objetos construidos por otros programadores sin tener que saber cómo los han construido ellos. 
TIPO ABSTRACTO DE DATOS (TAD) 
El tipo abstracto de datos TAD describe, no sólo losatributos de un objeto sino también su comportamiento operaciones o funciones y, en consecuencia, se puede incluir una descripción de los estados que puede tener el objeto. 
El término tipo abstracto de dato se consigue en programación orientada a objetos con el término clase. 
Una clase es la implementación de un tipo abstracto de dato y describe no sólo los atributos (datos) de un objeto sino también sus operaciones (comportamiento). 
Por ejemplo, la clase VEHÍCULO define que un vehículo 
∙ consta de motor, ruedas, placa de matrícula, etc 🡺 ATRIBUTOS 
∙ y se puede conducir, acelerar, frenar, etc 🡺 COMPORTAMIENTO 
CLASES 
Una clase es la definición de las características concretas de un determinado tipo de objeto. Es simplemente una abstracción. 
El ser humano tiende a agrupar seres o cosas (objetos) con características similares en grupos (clases). 
Una clase describe un objeto, en la práctica múltiples objetos. En conceptos de programación, una clase es un tipo de dato, y se pueden crear variables de ese tipo. En programación orientada a objetos, a estas variables, se las denomina instancias. 
Las instancias son la implementación de los objetos descritos en una clase.Estas instancias constan de los datos o atributos descritos en la clase y se pueden manipular con las operaciones definidas en la propia clase. 
En un lenguaje de programación OO, objeto e instancia son términos sinónimos Así, cuando se declara una variable de tipo Auto, se crea un objeto Auto (una instancia de la clase Auto). En POO existe otro concepto muy importante asociado al de clase, el de clase abstracta. Aquella que construimos para derivar de ella otras clases, pero de la que no se puede instanciar Una clase abstracta sólo puede servir como clase base (sólo se puede heredar de ella) Sus clases hijas sí pueden tener instancias.
Por ejemplo, la clase mamífero, no existe como tal en la naturaleza, no existe ningún ser que sea tan solo mamífero (no hay ninguna instanciación directa de esa clase), existen humanos, gatos, conejos, etc. 
METODOS 
En programación orientada a objetos, las operaciones definidas para los objetos, se denominan métodos Cuando se llama a una operación de un objeto se interpreta como el envío de un mensaje a dicho objeto. 
Un programa orientado a objetos se forma enviando mensajes a los objetos, que a su vez producen (más mensajes a otros objetos. Así, cuando se llama a la operación " manejar para un objeto auto en realidad lo que se hace es enviar el mensaje " al objeto auto, que procesa (a continuación, el método correspondiente. 
En la práctica un programa orientado a objetos es una secuencia de operaciones de los objetos que actúan sus propios datos. 
OBJETOS 
Un objeto es una instancia o ejemplar de una clase. En POO, es un conjunto de datos y métodos. Estructura o características de un objeto: 
∙ATRIBUTOS o PROPIEDADES 🡺 Datos. 
∙COMPORTAMIENTO u OPERACIONES 🡺 Métodos. 
Los datos y métodos están tan intrínsecamente ligados, que forman una misma unidad conceptual y operacional. 
En POO, no se pueden desligar los datos de los métodos de un objeto Así es como ocurre en el mundo real. 
Los objetos pueden ser físicos o conceptuales. 
¿Cómo identifico y modelo un objeto? 
Un objeto en software es una entidad individual de un sistema que guarda una relación directa con los objetos del mundo real. La correspondencia entre objetos de programación y objetos del mundo real es el resultado práctico de combinar atributos y operaciones, o datos y funciones. Un objeto tiene un estado, un comportamiento y una identidad. 
Estado de un Objeto 
Conjunto de valores de todos los atributos de un objeto en un instante de tiempo determinado. 
El estado de un objeto viene determinado por los valores que toman sus datos o atributos. Estos valores han de cumplir siempre las restricciones que se hayan impuesto. El estado de un objeto tiene un carácter dinámico que evoluciona con el tiempo.
Comportamiento de un Objeto 
Conjunto de operaciones que se pueden realizar sobre un objeto. 
Las operaciones pueden ser de observación del estado interno del objeto, o bien de modificación de dicho estado. 
El estado de un objeto puede evolucionar en función de la aplicación de sus operaciones. Estas operaciones se realizan tras la recepción de un mensaje o estímulo externo enviado por otro objeto. 
Las interacciones entre los objetos se representan mediante diagramas de objetos (UML). Identidad de un Objeto 
Permite diferenciar los objetos de modo no ambiguo independientemente de su estado. Es posible distinguir dos objetos en los cuáles todos sus atributos sean iguales. Cada objeto posee su propia identidad de manera implícita. 
Cada objeto ocupa su propia posición en la memoria de la computadora. 
ABSTRACCION 
La abstracción es la propiedad que considera los aspectos más significativos o notables de un problema y expresa una solución en esos términos. 
Es la etapa crucial de representación de la información en términos de la interfaz con el usuario. 
Se representa con un tipo definido por el usuario, con el diseño de una clase que implementa la interfaz correspondiente. 
Posee diversos grados que ayudan a estructurar la complejidad intrínseca que poseen los sistemas del mundo real. En el análisis de un sistema hay que concentrarse en ¿qué hace? y no en ¿cómo lo hace? 
En este proceso se definen los atributos y métodos de una clase. 
El principio de abstracción es similar en el software. Se puede utilizar código sin conocimiento de la implementación fundamental. 
La abstracción es el principio fundamental que se encuentra tras la reutilización. Sólo se puede reutilizar un componente si en él se ha abstraído la esencia de un conjunto de elementos del confuso mundo real que aparecen una y otra vez con li eras variantes en sistemas diferentes. ENCAPSULAMIENTO 
Es la exposición de las propiedades y métodos de un objeto mientras la implementación real permanece oculta del mundo exterior. 
El objeto es tratado como una caja negra.
Esto permite que los desarrolladores creen objetos que pueden ser alterados sin afectar el código fuente que los utiliza. 
En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento. 
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la Clase pero no será necesario saber cómo lo hace. 
Se puede modificar la implementación de una clase sin afectar a las restantes relacionadas con ella. 
En la práctica, el encapsulamiento significa que cada clase debe tener dos partes: INTERFAZ 🡺 Vista externa 
IMPLEMENTACIÓN 🡺 Representación de la abstracción y los mecanismos que realizan el comportamiento deseado. 
El encapsulamiento protege los datos de manipulaciones no autorizadas. 
ABSTRACCION VS. ENCAPSULAMIENTO 
En resumen, la abstracción se enfoca en simplificar y representar conceptos complejos de forma clara y efectiva, mientras que el encapsulamiento se enfoca en proteger los datos y métodos de un objeto para mantener la integridad y seguridad del sistema (público / privado). Ambos conceptos son fundamentales para el diseño de sistemas orientados a objetos robustos y mantenibles. 
HERENCIA 
El concepto de clase conduce al concepto de herencia. En la vida diaria se utiliza el concepto de clases que se dividen a su vez en subclases. 
La idea principal de estos tipos de divisiones reside en el hecho de que cada subclase comparte características con la clase de la cual se deriva. Además de estas características compartidas, cada subclase tiene sus propias características. 
La clase principal de la que derivan las restantes se denomina clase base, clase padre o superclase y las subclases, también se denominan clases derivadas. 
Las clases modelan el hecho de que el mundo realcontiene objetos con propiedades (atributos) y comportamiento. 
La herencia modela estos objetos en jerarquías. Esta jerarquía desde el punto de vista del modelado se denomina relación de generalización o es-un (is-a). 
En programación orientada a objetos, la relación de generalización se denomina herencia.
Cada clase derivada hereda las características de la clase base y además cada clase derivada añade sus propias características (atributos y operaciones). Las clases bases pueden a su vez ser también subclases o clases derivadas de otras superclases o clases base. 
POLIMORFISMO 
Es la habilidad que poseen los objetos para reaccionar de modo diferente ante los mismos mensajes. 
El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica, que pueden utilizarse de manera intercambiable mediante código cliente en tiempo de ejecución. 
Poli = muchos y Morfo = formas - "muchas formas" 
Por ejemplo, se puede abrir una puerta, abrir una ventana, abrir un libro, abrir un periódico, abrir una cuenta corriente en un banco, abrir una conversación, abrir un congreso, etc. En cada caso se realiza una operación diferente. En orientación a objetos, cada clase "conoce" cómo realizar esa operación. 
En la práctica, el polimorfismo significa la capacidad de una operación de ser interpretada sólo por el propio objeto que lo invoca. 
Desde un punto de vista práctico de ejecución del programa, el polimorfismo se realiza en tiempo de ejecución ya que durante la compilación no se conoce qué tipo de objeto y por consiguiente qué operación ha sido invocada. 
Supongamos, por ejemplo, que se trata de realizar un diseño gráfico para representar figuras geométricas, tales como triángulo, rectángulo y círculo, y que se desea calcular el área de cada figura. Cada figura tiene un método u operación distinta para calcular su área. El polimorfismo permite definir una única función obtenerArea( ) , cuya implementación es diferente en la clase triángulo, rectángulo o círculo, y cuando se selecciona un objeto específico en tiempo de ejecución, la función que se ejecuta es la correspondiente al objeto específico de la clase seleccionada. 
La propiedad de polimorfismo, en esencia, es aquella en que una operación tiene el mismo nombre en diferentes clases, pero se ejecuta de diferentes formas en cada clase. El polimorfismo es importante tanto en el modelado de sistemas como en el desarrollo de software. En el modelado porque el uso de palabras iguales tiene comportamientos distintos, según el problema a resolver. En software, porque el polimorfismo toma ventaja de la propiedad de la herencia. 
CONSTRUCTORES 
Un constructor es un método que tiene el mismo nombre que la clase y cuyo propósito es inicializar los miembros datos de un nuevo objeto que se ejecuta automáticamente cuando se crea un objeto de una clase.
Sintácticamente es similar a un método. 
Dependiendo del número y tipos de los argumentos proporcionados, una función o método constructor se llama automáticamente cada vez que se crea un objeto. 
Si no se ha escrito ninguna función constructor en la clase, el compilador proporciona un constructor por defecto. 
∙ Un constructor tiene el mismo nombre que la propia clase. 
∙ Nunca devuelve un valor. 
∙ Puede tomar cualquier número de parámetros (cero o más). 
∙ Un constructor que no tiene parámetros se llama constructor por defecto. ∙ Un constructor por defecto normalmente inicializa los miembros dato asignándoles valores por defecto. 
Hay que tener en cuenta una cosa: el constructor por defecto es sólo incluido por el compilador si no hemos definido ningún otro constructor. 
Por tanto, si tenemos una clase en la que hayamos definido algún constructor con parámetros pero ninguno sin parámetros no será válido crear objetos de la misma llamando al constructor sin parámetros, pues el compilador no lo habrá definido automáticamente. 
La sobrecarga de métodos es la creación de varios métodos con el mismo nombre, siempre y cuando el tipo de parámetros que recibe o el número de ellos sea diferente. 
En una clase un constructor puede sobrecargarse. 
DESTRUCTORES 
La contrapartida a un constructor es un destructor. 
Los destructores son funciones (métodos) que tienen el mismo nombre de la clase al igual que los constructores, pero para distinguirlos sintácticamente se les precede por una tilde (—) o por la palabra reservada destructor. 
Al igual que sucede con los constructores, se proporciona un constructor por defecto en el caso de que no se incluya explícitamente en la declaración de la clase. 
Al contrario que los constructores, sólo puede haber un destructor por clase. Esto se debe a que los destructores no pueden tener argumentos ni devolver valores. 
Los destructores se llaman automáticamente siempre que un objeto deje de existir y su objetivo es limpiar cualquier efecto no deseado que haya podido dejar el objeto. 
POLIMORFISMO - SOBRECARGA 
La sobrecarga representa diferentes maneras de realizar una misma acción. En los programas se usa el mismo nombre en diferentes métodos con diferentes firmas [número, orden y tipo de los parámetros].
El código de programación asociado a cada sobrecarga puede variar. 
Ejemplos: 
miEmpleado.Contratar("Juan", "Ventas", 2500); 
miEmpleado.Contratar("Juan"); 
miEmpleado.Contratar("Juan", 2500); 
POLIMORFISMO POR SOBREESCRITURA 
Sucede cuando una clase "B" hereda características de una clase "A", pero la clase "B" re-define las características heredadas de "A". 
Propiedades y métodos pueden heredarse de una superclase. Si estas propiedades y métodos son re-definidos en la clase derivada, se dice 
que han sido "Sobreescritos".

Continuar navegando