Lenguajes de Programación I

Documentos relacionados
Introducción a OOP. Programación Orientada a Objeto

Lenguajes de Programación I

Lenguajes de Programación I

Programación orientada a objetos

Conceptos Básicos. Programación Orientada a Objetos 2

PROGRAMACIÓN EN JAVA

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

Lenguajes de Programación I

Edwin Andrés Cubillos Vega

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Clases y herencia. FJP Unidad 8. Diseño de clases

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

PROGRAMACION ORIENTADA A OBJETOS EN C++

Programación Orientada a Objetos en C++

Tipo de Datos Abstractos y Programación Orientada a Objetos

Herencia. Implementación en Java

3.1 Introducción a TDA y OO. Capítulo III. Tipos de Datos Abstractos, Orientación a Objetos y Lenguaje Java

Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

UNIDAD 4 IMPLEMENTACION DE PROPIEDADES DE LOS OBJETOS JAVA

Encapsulamiento, polimorfismo, abstracción y herencia

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Clases y Objetos en C++

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Objetivos. Objetivos. Herencia. Objetivos. agregar funcionalidad a una clase existente, sin compilar su nueva definición.

A3F. Objetos (uso) Carlos Fontela

Metodologías en la Ingeniería del Software Métodos Orientados a Objetos

PROGRAMACIÓN ORIENTADA A OBJETOS

Programación con Java Básico

Programación Orientada a Objetos. Integrantes: Santiago Hernández Bolívar Edwin Alexander Bohórquez

Taller de Programación I. Tema 10: Herencia en Java

TEMA 6: Lenguajes orientados a objetos. Fundamentos teóricos.

Herencia. Proceso mediante el cual una clase adquiere las propiedades (atributos) y comportamiento (métodos) de otra.

Tema 1. Lección 2. Conceptos Básicos de los Lenguajes Dirigidos a Objetos. Departamento de Lenguajes y Sistemas informáticos Universidad de Granada

Guía práctica de estudio 07: Herencia

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Introducción a la Orientación a Objetos

CAPÍTULO 2: CARACTERÍSTICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS. ABSTRACCIÓN. ENCAPSULAMIENTO. PRINCIPIO DE OCULTACIÓN. HERENCIA. POLIMORFISMO.

Java Avanzado Facultad de Ingeniería. Escuela de computación.

La Herencia: Teoría (1)

Herencia y Clases Abstractas

A3F. Objetos (uso) Carlos Fontela

Introducción al Paradigma Orientado a Objetos

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

Tema 3 Herencia en Java Parte 1. Programación Orientada a Objetos Curso 2015/2016

Tema: Herencia en C#.

Guía práctica de estudio 08: Polimorfismo

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

INDICE Parte I Algoritmos y herramientas de programación Capitulo 1. Computadoras y lenguajes de programación Actividades de Programación Resueltas

PNFSI. Asignatura: Desarrollo de Software. Tema 1: Programación Orientada a Objetos

Conceptos de Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos

Universidad Nacional del Santa E.A.P. Sistemas e Informática Microcomputación III

Programación Inicial. Requisitos previos. Objetivos. Próximos Inicios. Modalidad a Distancia. Costo y formas de pago. Resumen de Contenidos

Programación. Orientada a Objetos. Prof. Angela Di Serio. Universidad Simón Bolívar Especialización en Telemática

Introducción código transversal

POO. Por tanto, una clase nos permite crear varios objetos que pueden realizar la misma función o funciones diferentes.

Curso de Java POO: Programación orientada a objetos

RTTI y reflexión A3F. Carlos

Tema 1.- Conceptos básicos de la OO

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación.

Tema: Herencia en C#.

Reutilización con Delegación y Herencia

Tema 1 Introducción al paradigma de programación orientado a objetos

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

Lenguajes de Programación I

Curso Programación Orientada a Objectos con C# y Visual Studio 2013

Unidad 2. Elementos Intermedios del Lenguaje

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

TALLER FINAL DE ALGORITMO Y PROGRAMACION ORIENTADA A OBJETOS I (POOI) PRESENTADO POR: GUSTAVO ENRRIQUE SINNING FUENTES. VIRTOR FABIAN RIZO.

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

Definiciones en Orientación a Objetos

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

Programación Orientada a Objetos (POO)

Programación Orientada a Objetos

Abstracción. Encapsulamiento. Polimorfismo. Objeto. método / objeto / clase / módulo. Separación de las propiedades de un

Paradigmas de Programación

JAVA 7 Los fundamentos del lenguaje Java

TALLER FINAL DE ALGORITMO Y PROGRAMACIÓN ORIENTADA A OBJETOS I (POOI) PRESENTADO POR ENDRIS JUDITH CABALLERO CARO KEYLA JAKELINE JIMENEZ CUADROS

Curso de Java POO: Programación orientada a objetos

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

INTRODUCCIÓN A LA PROGRAMACIÓN

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Programación n de sistemas

Ingeniería del Software Orientada a Objetos. Unidad 5: Conceptos del Paradigma Orientado a Objetos

Las clases están compuestas por un conjunto de miembros. (datos y funciones) también se conocen como (atributos y métodos)

Reutilización con Delegación y Herencia

Programación Orientada a Objetos Profr. Pedro Pablo Mayorga

Paradigma Orientado a Objetos Caso de estudio: Squeak Smalltalk. Lenguajes de Programación 2018

Universidad Salesiana de Bolivia

POO: Herencia. Programación de aplicaciones. Jesus Barron Vidales 7/05/10

Principios de Computadoras II

Lenguajes de Programación I

Transcripción:

Lenguajes de Programación I Orientación a Objetos Ernesto Hernández-Novich <emhn@usb.ve> Copyright c 2006-2010

Módulos como abstracción de datos Los módulos conducen a un estilo de programación en el cual ofrecen un tipo abstracto de datos. Los módulos como tipos (clase) elevan el nivel de abstracción. Creación y destrucción de instancias del módulo (objetos). Invocación de rutinas a través de una instancia (métodos o mensajes). Módulo como refinamiento de datos (herencia). Módulo como refinamiento de comportamiento (asociación dinámica de métodos). Los lenguajes o técnicas de programación que operan de ésta manera son orientados a objetos.

Mitos y concepciones erróneas La orientación a objetos no nació como una evolución de los módulos sino directamente Simula. Sin privacidad de datos si puede haber orientación a objetos por técnica como en Simula o Perl. Con tipos dinámicos si puede haber orientación a objetos por lenguaje como en Smalltalk o técnica como en Perl). En lenguajes funcionales si puede haber orientación a objetos CLOS, y es lejos el mejor modelo OO. La herencia múltiple no es mala (del todo). La Programación Orientada a objetos no es la solución para todos los problemas de programación.

Ventajas de la Programación Orientada a Objetos Reduce la carga conceptual minimizar la cantidad de detalle que el programador tiene que conocer en un momento dado. Facilita la contención de problemas Impidiendo que el programador use componentes de manera equivocada. Limitando la porción de programa que debe considerarse en la búsqueda de errores. Eleva notablemente el nivel de independencia entre componentes del programa. Facilita el desarrollo en equipo. Simplifica la evolución interna sin alterar sistemas dependientes. Fomenta la reutilización de código. Es una manera de mejorar las oportunidades de reutilizar código facilitando el refinamiento de abstracciones existentes.

Terminología Clase modelo de abstracción. Se instancia en objetos. Cada clase contiene miembros. Estado atributos, miembros, campos, slots,... Comportamiento métodos o mensajes. Los métodos necesitan saber sobre cuál instancia particular están operando Identidad del objeto Referencia predefinida this, self, current,... Referencia arbitraria pasada como argumento (Perl). Métodos especiales para la elaboración (constructores). Usualmente se llaman igual que la clase (C++, Java, C#). Usados explícitamente (new). Métodos especiales para la destrucción (destructores). Típicos en lenguajes sin recolección de basura (C++). Necesarios si los atributos son complejos.

Definición de clases Típicamente Una clase enteramente contenida en un archivo. Una clase visible por módulo. Reglas de alcance estático se extienden considerando que una clase define un bloque léxicográfico. Definición separada de implantación (C++, Modula). Favorecer la compilación separada. Reducir la polución del espacio de nombres. Definición distribuida entre varios archivos (Ruby, Perl). Posible extender la clase Foo desde cualquier punto de mi programa básicamente agregar métodos. Monkey-patching la magia del hombre blanco.

Visibilidad Permite decidir la disponibilidad de los atributos Públicos aquellos visibles al usuario de la abstracción. Privados aquellos requeridos por la implantación. Privado a menos que se indique lo contrario (Java, C#). Público a menos que se indique lo contrario (C++). En lenguajes con compilación separada (C++) es necesario utilizar un operador de resolución de alcance.

Acceso a los atributos Los atributos deberían ser privados Métodos de acceso para consultar y asignar los atributos accesor methods o setters/getters. Subrutinas muy pequeñas. Se ejecutan con mucha frecuencia impacto negativo en el rendimiento por el costo de llamada. Inlining optimización en lenguajes compilados. Generadas automáticamente vía sintaxis (C#, Ruby, Perl). Métodos de índice en clases contenedoras Hacen lucir los objetos como arreglos. Acceso l-value o r-value según el contexto.

Refinación de Abstracciones Herencia Una clase B puede derivar a una clase A. B es una subclase de A, y A es una superclase de B. Todo objeto de la clase B es un objeto de la clase A. B hereda atributos y métodos de A. B agrega atributos y métodos adicionales. Esto crea jerarquías de clases. Jerarquía estándar provista por el lenguaje. La mayoría de los lenguajes orientados a objetos ofrecen un árbol con una raíz común (Smalltalk, Java, C#). Algunos lenguajes proveen una foresta (C++). Clases de Propósito General o Abstractas Representar datos genéricos refinar después. Representar comportamientos genéricos refinar después. Para ambas cosas simultáneamente.

Redefinición Para redefinir miembros basta con declararlos. No se pierde el acceso al miembro de la superclase. Operador de resolución de alcance (C++). Palabra reservada (super o base en Java, Smalltalk). Ambas opciones (Perl, Ruby).

Encapsulamiento Agrupar los datos y las subrutinas que operan con ellos, ocultando detalles irrelevantes de los usuarios de la abstracción. Con módulos cuando el lenguaje no es orientado a objetos pero se quiere la técnica orientada a objetos. Con clases cuando el lenguaje es orientado a objetos.

Encapsulamiento con Módulos Declaración del módulo vs. implantación del módulo. Si el módulo exporta un tipo T, el código usuario sólo puede usar objetos del tipo T con las funciones exportadas por el módulo. Opcionalmente puede haber asignaciones/comparaciones bit-a-bit entre objetos del tipo T. En lenguajes con compilación separada, sólo se declaran el nombre del tipo y las firmas de las subrutinas exportadas. Uso de las reglas de alcance. Variables globales al módulo, invisibles afuera. Variables globales al módulo, visibles afuera.

Encapsulamiento con Clases Las reglas de alcance se complican con la existencia de miembros privados. Una clase puede usar a su superclase de forma privada Las partes públicas se vuelven privadas. Aquellas necesarias deben solicitarse explícitamente en la declaración (using en C++). Privacidad extendida a subclases (protected de C++). Típicamente las subclases pueden reducir la visibilidad. Salvo en Eiffel donde también pueden aumentarla gracias a la visibilidad selectiva......o en Java y C#, que ni tienen protected para las clases ni está permitido cambiar la visibilidad de miembros. Nada de privacidad explícita (Python, Perl)