RVBurke. Programación orientada a objetos en Python. Introducción a la programación orientada a objetos. Información. Búsqueda.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "RVBurke. Programación orientada a objetos en Python. Introducción a la programación orientada a objetos. Información. Búsqueda."

Transcripción

1 RVBurke Arquitectura y técnica Programación orientada a objetos en Python by pachi Información blog.rvburke.com Sobre este sitio Introducción a la programación orientada a objetos Búsqueda Este artículo es una introducción a la programación orientada a objetos (POO, o OOP por sus siglas en inglés), uno de los paradigmas de programación estructurada más importante hoy en día. El artículo usa el lenguaje Python para los distintos ejemplos, y explica la implementación de la POO en ese lenguaje, aunque aborda conceptos generales que son fácilmente trasladables a otros lenguajes. Los fragmentos de código se señalan usando un estilo de texto diferente (ancho fijo) y, cuando se utiliza el intérprete de python, se prefija cada línea con los símbolos >>>. Esta introducción presupone conocimientos básicos de programación y del lenguaje python. Formas de pensar: paradigmas de programación Uno de los elementos básicos a la hora de realizar un programa es la modelización del problema que pretende resolver. Es preciso localizar las variables y los aspectos relevantes, así como comprender los pasos necesarios para obtener el resultado a partir de los datos iniciales, etc. Es decir, abstraer el problema, reduciendo sus detalles de forma que podamos trabajar con pocos elementos cada vez. La algoritmia plantea la forma óptima de resolver problemas concretos, tales como la ordenación de una lista de elementos, la búsqueda de un elemento en un conjunto, la manipulación de conjuntos de datos, etc. Sin embargo, no proporcionan un marco general, un enfoque, que nos permita plantear y formular las soluciones a un problema de forma coherente. Los paradigmas de programación llenan ese hueco, proporcionando guías tanto sobre cómo realizar la abstracción de los datos como sobre el control de la ejecución. Es decir, los paradigmas de programación son herramientas conceptuales para analizar, representar y abordar los problemas, Categorías arquitectura arte castellano chiara cuentos english espectáculos estructuras galego gnome libros mercurial OpenOffice pascaline programación python recetas reminders sociedad software-libre Archivo mensual April 2011 January 2011

2 presentando sistematizaciones alternativas o complementarias para pasar del espacio de los problemas al de las implementaciones de una solución. Es muy recomendable y productivo comprender el enfoque de distintos paradigmas, puesto que presentan estrategias alternativas, incrementando nuestras herramientas disponibles y haciéndono reflexionar sobre muchas de las tareas que realizamos al crear un programa. Además, a menudo ocurre que unos problemas se formulan de forma muy clara si se los analiza según una perspectiva determinada, mientras que producen una gran complejidad vistos de otra manera. Algunos paradigmas habituales Algunas de las formas de pensar los problemas que ha llegado a sistematizarse como paradigmas de programación son: La programación modular: Los programas se forman por partes separadas llamadas módulos. Estos funcionan de forma independiente entre sí, o se relacionan a través de interfaces bien definidas. La programación procedural: Un programa se compone de procedimientos (subrutinas, métodos o funciones) que son fragmentos de código que pueden llamarse desde cualquier punto de la ejecución de un programa, incluídos otros procedimientos o él mismo. (ej. ALGOL) La programación estructurada: Se puede expresar cualquier programa utilizando únicamente tres estructuras de control: secuencial, condicional e iterativa. Los programas se componen de partes menores con un único punto de entrada, y se trata de aislarlos para evitar la complejidad que introducen los efectos colaterales. (ej. Pascal, C, Ada) La programación imperativa: Un programa se puede definir en términos de estado, y de instrucciones secuenciales que modifican dicho estado. (ej. C, BASIC) La programación declarativa: Es posible expresar un programa a través de condiciones, proposiciones o restricciones, a partir de los que se obtiene la solución mediante reglas internas de control. (ej. PROLOG) La programación funcional: Se puede expresar un programa como una secuencia de aplicación de funciones. Elude el concepto de estado del cómputo y no precisa de las estructuras de control de la programación estructurada. (ej. LISP, Haskell) La programación orientada a objetos: Los programas se definen en términos de clases de objetos que se comunican entre sí mediante el envío de mensajes. Es una evolución de los paradigmas de la programación procedural, estructurada y modular, y se implementa en lenguajes como Java, Smalltalk, Python o C++. Programación multiparadigma Los paradigmas de programación son idealizaciones, y, como tales, no siempre se presentan de forma totalmente pura, ni siempre resultan incompatibles entre sí. Cuando se entremezclan diversos paradigmas se produce lo que se conoce como programación multiparadigma. El uso de distintos modelos, según se adapten mejor a las diversas partes de un problema o a nuestra forma de pensamiento, resulta también más natural y permite expresar de forma más clara y concisa nuestras ideas. November 2010 May 2010 March 2010 December 2009 November 2009 September 2009 May 2009 December 2008 November 2008 October 2008 September 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 June 2007 May 2007 April 2007 March 2007 February 2007 December 2006 November 2006 October 2006 September 2006 August 2006 June 2006 Blogs Acotalanorma AnArchitecture ARQtipo Ingeniería y sostenibilidad Planet Gnome

3 Algunos lenguajes, como Haskell o Prolog están diseñados para encajar perfectamente en la visión de un paradigma particular, mientras que otros, como python, se adaptan especialmente bien a la programación multiparadigma y dan gran libertad a la hora de resolver un problema, al no imponen un mismo patrón para todos los casos. Tipos de datos Una forma de almacenar y representar una fecha en un programa podría ser la siguiente: d = 14 m = "Noviembre" a = 2006 def dime_fecha(dia, mes, anho): return "%i de %s de %i del calendario gregoriano" % (dia, mes, anho) print dime_fecha(d, m, a) para obtener la siguiente salida: "14 de Noviembre de 2006" En este ejemplo, para representar y manipular lo que conceptualmente entendemos como una fecha, se utilizan las variables d, m y a como almacenes de datos, y un procedimiento o función, de nombre dime_fecha, para realizar la representación de la fecha almacenada. Websites Belén Orta COAM De Mecánica ETSAM Milla, Mira y Navarro, Arquitectos Monserrat Boix Meta RSS 2.0 Feed Atom Feed Comments RSS Feed Log in Las variables permiten almacenar tipos de datos concretos como los enteros (d y a) o las cadenas de texto (m), y la función realiza su trabajo devolviendo otro tipo concreto, una cadena de texto. Uno de los problemas de este enfoque es que no refleja demasiado bien el concepto fecha que usamos como modelo mental al implementarlo como un conjunto de tres variables no relacionadas entre sí (d, m y a). Es decir, las tres variables tienen una unidad conceptual en nuestra mente, que no se refleja en la forma de expresar el problema. De la misma manera, la función dime_fecha desconoce igualmente la relación entre sus parámetros, que podría ser totalmente arbitraria. Esta situación, que puede parecer una cuestión de estilo, implica un riesgo de problemas de sincronización entre variables relacionadas, dispersión en distintas partes del código de manipulaciones que son relevantes al conjunto, pérdida del valor semántico de cada variable que puede dar lugar a errores al transformar el código Un ejemplo de desconexión semántica entre la implementación y el concepto es que d puede ser cualquier valor entero, mientras que un día tiene un valor situado entre 1 y 31, m es una cadena de texto dentro de un número limitado de opciones, o a no puede tomar valores negativos. Por supuesto que esto se podría solucionar con código que hiciese comprobaciones adicionales, pero en este caso queremos resaltar cómo un programa es un modelo aproximado a un problema y cómo sería preferible que la implementación pudiese representar de forma más ajustada el comportamiento del modelo elegido. Una posible solución sería disponer de un tipo de datos que represente de forma más adecuada el concepto de fecha y que nos permita manipular fechas de la

4 misma manera que manipulamos números enteros, números reales o cadenas de texto, independientemente de la implementación interna que los sustente. Clases y objetos Al enunciar algunos tipos de paradigmas hemos visto que la programación orientada a objetos define los programas en términos de clases de objetos que se comunican entre sí mediante el envío de mensajes. En este apartado aclararemos qué se entiende en ese contexto por clases y objetos. Las clases surgen de la generalización de los tipos de datos y permiten una representación más directa de los conceptos necesarios para la modelización de un problema permitiendo definir nuevos tipos al usuario. Las clases permiten agrupar en un nuevo tipo los datos y las funcionalidades asociadas a dichos datos, favoreciendo la separación entre los detalles de la implementación de las propiedades esenciales para su uso. A esta cualidad, de no mostrar más que la información relevante, ocultando el estado y los métodos internos de la clase, es conocida como encapsulación, y es un principio heredado de la programación modular. Un aspecto importante en el uso de clases es que no se manipulan directamente (salvo en lo que se conoce como metaprogramación), sino que sirven para la definición nuevos tipos. Una clase define propiedades y comportamiento que se muestran en los entes llamados objetos (o instancias de una clase). La clase actúa como molde de un conjunto de objetos, de los que se dice que pertenecen a la clase. Trasladando estos conceptos a los números enteros (tipo int), se puede decir que las variables que almacenan números enteros son objetos o instancias de la clase int o que pertenecen a la clase int. En términos más abstractos, podemos pensar en las clases como definiciones y en los objetos como expresiones concretas de dichas definiciones. Fisonomía de una clase En python, el esquema para la definición de una clase es el siguiente: class NombreClase: <instrucción_1>... <instrucción_n> en donde class es una palabra reservada que indica la declaración de una clase, NombreClase una etiqueta que da nombre a la clase y, los dos puntos, que señalan el inicio del bloque de instrucciones de la clase. El cuerpo de instrucciones de la clase puede contener tanto asignaciones de datos como definiciones de funciones. Este bloque de instrucciones se encuentra en el nuevo espacio de nombres con el nombre de la clase, que se genera, a su vez, con la creación de cada objeto. En ambos casos, en el espacio de nombres de la clase y del objeto, es posible acceder a los elementos que lo integran usando el operador punto, como en el caso de los espacios de nombres de un módulo (e.j. math.pi, objeto.dato, objeto.funcion()). Si la primera instrucción del cuerpo de la clase es una cadena de texto, ésta se

5 usa como cadena de documentación de la clase. Nuestro ejemplo podría reescribirse en términos de una clase así: class Fecha: "Ejemplo de clase para representar fechas" dia = 14 mes = "Noviembre" anho = 2006 def dime_fecha(self): return "%i de %s de %i" % (Fecha.dia, Fecha.mes, Fecha.anho) mi_fecha = Fecha() print mi_fecha.dia, mi_fecha.mes, mi_fecha.anho print mi_fecha.dime_fecha() En el fragmento de código anterior definimos la clase Fecha y ella asignamos valores a las etiquetas dia, mes y anho (atributos de la clase), y definimos una función (un método de la clase), dime_fecha. Fuera de la definición de la clase creamos (instanciamos) un objeto perteneciente a la clase Fecha. Esta instanciación se realiza utilizando la notación de llamada a función, y podemos entenderla como una llamada a una función que devuelve un objeto de la clase Fecha. El objeto obtenido es asignado a la etiqueta mi_fecha. En la siguientes instrucciones mostramos por pantalla los valores de las propiedades dia, mes y anho y el resultado de la llamada al método dime_fecha, usando el operador punto para acceder a las propiedades y métodos del objeto mi_fecha, ya que, como hemos mencionado antes, forman parte del espacio de nombres del objeto. La llamada al método dime_fecha no incluye ningún parámetro, pero podemos comprobar que, de forma contradictoria, la declaración del método indica uno, self. Este parámetro es añadido automáticamente por el intérprete en las llamadas a los métodos de una clase, y contiene una referencia al objeto que recibe la señal (el que recibe una llamada a un método). self permite acceder a las propiedades y métodos de un objeto concreto y aclararemos su significado y uso más adelante. Por ahora nos basta saber que es necesario incluir self como primer parámetro de los métodos definidos en una clase y que no es preciso incluir el parámetro implícito self al realizar llamadas a un método a través del objeto al que pertenece. En realidad, en el ejemplo anterior, la llamada mi_fecha.dime_fecha() es una forma más cómoda de escribir (azúcar sintáctico) Fecha.dime_fecha(mi_fecha), lo que explica la presencia del parámetro. Un paseo entre objetos Hasta el momento hemos visto cómo las clases definen los datos (o estado) y comportamiento de los objetos a través de atributos (o propiedades) y métodos. Ahora vamos a hacer un recorrido, utilizando una sesión interactiva del intérprete y las capacidades de introspección de python, para explicar el uso y el comportamiento de los objetos. Veremos algunas características de los objetos:

6 1. Identidad. Los objetos se diferencian entre sí, de forma que dos objetos, creados a partir de la misma clase y con los mismos parámetros de inicialización, son entes distintos. 2. Definen su comportamiento (y operar sobre sus datos) a través de métodos, equivalentes a funciones. 3. Definen o reflejan su estado (datos) a través de propiedades o atributos, que pueden ser tipos concretos u otros objetos. Pasamos a ver una sesión interactiva del intérprete: >>> mi_fecha = Fecha() >>> mi_fecha_2 = Fecha() >>> mi_fecha is mi_fecha_2 False >>> print mi_fecha < main.fecha instance at 0x00B184B8> >>> print mi_fecha_2 < main.fecha instance at 0x00B18328> Vemos que tanto mi_fecha como mi_fecha_2 son instancias de la clase Fecha (en el módulo main ) y cada una tiene su propio espacio de memoria independiente. >>> print mi_fecha.dime_fecha() 14 de Noviembre de 2006 >>> print mi_fecha.dia 14 >>> print mi_fecha_2.dia 14 >>> Fecha.dia = 16 >>> print Fecha.dia 16 >>> print mi_fecha.dia 16 >>> print mi_fecha_2.dia 16 >>> mi_fecha.dia = 30 >>> print Fecha.dia 16 >>> print mi_fecha.dia 30 >>> print mi_fecha_2.dia 16 Este último experimento observamos cómo, pese a que mi_fecha y mi_fecha_2 son dos instancias distintas de la clase Fecha, ambas hacen referencia a través de su atributo dia al mismo valor de la clase Fecha.dia. Sin embargo, cuando se produce una asignación a ese atributo (a esa etiqueta, en realidad) en uno de los objetos vemos cómo, a partir de entonces, ese objeto dispone de un valor 'individual' asociado al atributo. Ese comportamiento revela la existencia de atributos (o estado) compartidos

7 por todas las instancias de una clase y de atributos (o estado) ligados a una instancia particular. Los primeros se sitúan en el espacio de nombres de la clase, y vemos cómo se pueden hacer asignaciones en la sesión interactiva anterior, o lecturas, en el método dime_fecha del ejemplo anterior. Los segundos se sitúan en el espacio de nombres de cada objeto, y ahí es donde resulta útil el parámetro self. Antes de proseguir, podemos escudriñar qué símbolos son accesibles y qué contienen los espacios de nombres de la clase Fecha y de los objetos mi_fecha y mi_fecha_2. Usamos la función dir para lo primero, y el atributo dict para lo segundo, ya que en python los espacios de nombres se implementan como diccionarios: >>> dir(fecha) [' doc ', ' module ', 'anho', 'dia', 'dime_fecha', 'mes'] >>> dir(fecha3) [' doc ', ' module ', 'anho', 'dia', 'dime_fecha', 'mes'] >>> dir(fecha4) [' doc ', ' module ', 'anho', 'dia', 'dime_fecha', 'mes'] En los tres podemos acceder a los mismos símbolos. Sin embargo... >>> Fecha. dict {' module ': ' main ', 'anho': 2006, 'dime_fecha': x00b176f0>, 'dia': 14, 'mes': 'Noviembre', ' doc ': 'Ejemplo de clase para representar fechas'} >>> mi_fecha_2. dict {} >>> mi_fecha. dict {'dia': 30} El espacio de nombres de la clase es el que alberga los nombres de los atributos y métodos indicados en la declaración de la clase, además de los atributos especiales doc, que contiene la cadena de documentación y module, que contiene el nombre del módulo al que pertenece la clase. Esos símbolos son accesibles también para los objetos pertenecientes a la clase (tal como nos indicaba dir()). Podemos ver también que el espacio de nombres del objeto mi_fecha_2 se encuentra vacío, mientras que el del objeto mi_fecha contiene el atributo día. Esto se debe a que anteriormente realizamos una asignación al atributo dia del objeto mi_fecha (dándole el valor 30). El espacio de nombres recoge esa versión particular del atributo, que no aparece en el otro objeto, puesto que accede al atributo de clase. A los atributos compartidos por todos los objetos de una clase se los denomina atributos de clase, cuando se desea diferenciarlos de los atributos que pertenecen a cada instancia en particular. Acceso individualizado a objetos: self Ahora que hemos visto cómo usar atributos de clase para compartir datos entre todos los objetos de una misma clase, también nos interesa conocer cómo utilizar

8 atributos comunes a una clase pero que puedan tomar valores distintos para cada uno de los objetos. Retomamos ahora el misterioso parámetro self que vimos estaba presente como primer parámetro de todos los métodos de una clase. En su momento ya comentamos que self contiene una referencia al objeto que recibe la señal (el objeto cuyo método es llamado), por lo que podemos usar esa referencia para acceder al espacio de nombres del objeto, es decir, a sus atributos individuales. >>> class F:... i = 5... def dime_i(self):... return F.i... def dime_mi_i(self):... return self.i... >>> a = F() >>> a.dime_i() 5 >>> a.dime_mi_i() 5 >>> a.i = 6 >>> a.dime_i() 5 >>> a.dime_mi_i() 6 >>> a.i 6 En este ejemplo el método dime_i usa el atributo de clase y retorna su valor, 5, mientras que el método dime_mi_i usa una referencia al objeto y devuelve el valor 6, el asignado al atributo del objeto a. Así accedemos selectivamente al atributo de clase i o al atributo de instancia i. Algo que puede aclarar algo más la naturaleza del parámetro self, es recordar que, cuando hacemos una llamada a un método un_metodo de un objeto un_objeto perteneciente a la clase UnaClase, el intérprete traduce la expresión un_objeto.un_metodo() como UnaClase.un_metodo(un_objeto). El uso de self responde a la forma particular en que python implementa el soporte de objetos, aunque lenguajes como Java o C++ utilizan mecanismos similares con la palabra reservada this. En python self no es una palabra reservada y cualquier etiqueta usada como primer parámetro valdría igualmente, aunque se desaconseja totalmente el uso de otras etiquetas, por tratarse de una convención muy arraigada en el lenguaje que hace el código más legible, facilita el resaltado de sintaxis, etc. El método de inicialización init Hemos visto ya cómo definir y usar atributos de clase y de instancia. Pero en python no es necesaria la declaración de variables, por lo que cualquier atributo al que se realice una asignación en el código se convierte en un atributo de instancia: >>> a = F() >>> a.i = 6

9 >>> a.atr = 3 >>> print a.atr 3 >>> a. dict {'i': 6, 'atr': 3} Una funcionalidad muy conveniente que hemos visto en la declaración de atributos de clase es la de realizar su inicialización en el cuerpo de la clase. Para poder inicializar los atributos de una instancia existe un método especial que permite actuar sobre la inicialización del objeto. Dicho método se denomina init (con dos guiones bajos al principio y al final) y admite cualquier número de parámetros, siendo el primero la referencia al objeto que es incializado (self, por convención), que nos permite realizar las asignaciones a atributos de la instancia. Este método se ejecuta siempre que se crea un nuevo objeto de la clase, tras la asignación de memoria y con los atributos de clase inicializados, y se corresponde parcialmente con el concepto de constructor de la clase existente en otros lenguajes. Con la referencia que nos proporciona self podemos inicializar atributos de instancia, con valores predeterminados si lo deseamos, como en cualquier definición de función: class Clase: def init (self, x=2): self.x = x self.a = x**2 self.b = x**3 self.c = 999 def dime_datos(self): return "Con x=%i obtenemos: a=%i, b=%i, c=%i" % (self.x, self.a, self.b, self.c) a1 = Clase(2) a1.dime_datos() a2 = Clase(3) a2.dime_datos() Salida: Con x=2 obtenemos: a=4, b=8, c=999 Con x=3 obtenemos: a=9, b=27, c=999 Propiedades y Atributos Aunque en la terminología general de la programación orientada a objetos atributo y propiedad se pueden utilizar como sinómimos, en python se particulariza el uso de propiedades para un tipo especial de atributos cuyo acceso se produce a través de llamadas a funciones. class ClaseC(object): def init (self): self. b = 0 def get_b(self): return self. b def set_b(self, valor): if valor > 10: self. b = 0 else: self. b = valor

10 b = property( get_b, set_b, 'Propiedad b') c1 = ClaseC() print c1.b # b es 0 c1.b = 5 print c1.b # b es 5 c2 = ClaseC() print c2.b # b es 0 c2.b = 12 print c2.b #b es 0 En este ejemplo se define la propiedad b, cuyo comportamiento es: cuando se realiza una asignación, toma el valor entregado si es menor que 10, o 0 en caso contrario, y lo almacena en un atributo privado b. Cuando se produce la lectura de b, devuelve el valor guardado en el atributo privado. En Python, para poder usar propiedades en una clase es necesario hacerla derivar de la clase object de ahí que aparezca al lado del nombre de la clase ClaseC. En un apartado posterior se explicará en qué consiste la derivación de clases. La signatura de la función property, que define una propiedad de la clase es la siguiente: nombre_propiedad = property(get_f, set_f, del_f, doc) donde get_f es la función llamada cuando se produce la lectura del atributo; set_f la función llamada cuando se produce una asignación al atributo; del_f la función llamada cuando se elimina el atributo, y doc es una cadena de documentación de la propiedad. Las propiedades resultan muy útiles para realizar la validación de los valores asignados, la transformación o cálculo de valores devueltos y, además, dotan de gran flexibilidad a la hora de escribir el código, puesto que es posible empezar usando atributos y luego sustituirlo por una propiedad que realice funciones adicionales, a medida que el código lo requiera y simplemente cambiando el código de la clase, sin afectar al código cliente de la clase. Herencia y derivación de clases Vemos que el uso de clases hace más adecuada la representación de conceptos en nuestros programas. Además, es posible generar una clase nueva a partir de otra, de la que recibe su comportamiento y estado (métodos y atributos), adaptándolos o ampliándolos según sea necesario. De una clase que representase el concepto de vehículo podríamos derivar otras para representar automóviles, bicicletas, barcos o aviones, donde cada uno de ellos mantiene atributos y métodos comunes (peso, color, velocidad máxima, número de pasajeros), mientras que otros son exclusivos (número de ruedas, número de hélices, número de reactores, altitud máxima de vuelo...). En términos matemáticos podemos expresarlo diciendo que es posible establecer relaciones de pertenencia entre clases. Si tenemos una clase A y de ella derivamos una clase B, podemos decir que "B es una A", o que "B es una especialización de A".

11 En la terminología de la POO se dice que "B hereda de A", "B es una clase derivada de A", "A es la clase base de B", "A es superclase de B" o "A es clase madre de B". Esto facilita la reutilización del código, puesto que se pueden implementar los comportamientos y datos básicos en una clase base y especializarlos en las clases derivadas. En un programa hipotético que trabajase con formas geométricas, podríamos tener una clase base Forma y clases derivadas de ella como Triangulo, Cuadrado, Circulo... En la clase base podríamos definir un método dibuja que representa la figura en pantalla, y un método area y otro perímetro que calculan el área y el perímetro, respectivamente. En el lenguaje python, para expresar que una clase deriva, desciende o es heredera de otra u otras clases se añade tras el nombre, en la declaración de la clase, una tupla con los nombres de las clases base. El siguiente ejemplo crea una ClaseA y de ella deriva una ClaseB que inicializa un atributo adicional, cambia el comportamiento de un método y hereda los atributos de la clase madre: class ClaseA: def init (self, x): self.a = x self.b = 2 * x def muestra(self): print "a=%i, b=%i" % (self.a, self.b) class ClaseB(ClaseA): def init (self, x, y): ClaseA. init (self, x) self.c = 3 * (x + y) + self.b def muestra(self): print "a=%i, b=%i, c=%i" % (self.a, self.b, self.c) print "Objeto A" a = ClaseA(2) print a. dict a.muestra() print "ObjetoB" b = ClaseB(2, 3) print b. dict b.muestra() Este código al ejecutarse devuelve: Objeto A {'a': 2, 'b': 4} a=2, b=4 ObjetoB {'a': 2, 'c': 19, 'b': 4} a=2, b=4, c=19 La clase ClaseA muestra funcionalidades que ya hemos ido viendo en esta introducción (atributos de instancia a y b, método muestra). La clase ClaseB se declara como descendiente de la ClaseA, por lo que hereda sus métodos y

12 atributos y modifica algo el comportamiento de la clase madre. Por una parte, en su método de inicialización llama al método de la clase madre con los parámetros deseados, y, posteriomente, añade un nuevo atributo de instancia que no existe en la clase madre. Por otro lado, redefine un método existente en ClaseA, cambiando la implementación. Esta última técnica, en la que un mismo nombre se asocia a comportamientos distintos se conoce como polimorfismo, y se habla de que el método se ha sobrecargado, es decir, se le asignan distintos significados en función de su contexto. El polimorfismo también alude a la posibilidad de utilizar, en un contexto en el que se espera una clase dada, cualquier clase derivada. La clase object Desde la versión 2.2 de python, se ha establecido una clase base llamada object de la que se aconseja derivar todas las clases. Esto permite aprovechar una serie de características sólo existentes en las "nuevas clases" (como la definición de propiedades), que se describen en la documentación de python. En el ejemplo sobre el uso de propiedades se introdujo la herencia sin explicarla, derivando la clase de object. Ahora debería estar más clara la razón. Jerarquías de clases La herencia permite establecer relaciones entre clases, y, estas relaciones de pertenencia pueden ser a varios niveles, y ramificarse en lo que se denominan jerarquías de clases. Un ejemplo de clásico para visualizar las jerarquías de clases es el que podría servir para modelizar el conjunto de empleados de una empresa. En ella aparece una clase base Empleado, que dispone de los atributos nombre y departamento; de ella descienden las subclases Gestor (atributo adicional informes) y Trabajador (atributo adicional proyectos), y de esta última derivan las clases Comercial (atributo adicional participación) e Ingeniero (atributo original area). Gráficamente podría representarse de la siguiente manera:

13 En el diagrama se puede ver en negrita los atributos que implementa cada clase, y en gris los que hereda de clases madre. El código (básico de inicialización) de las clases podría ser el siguiente: class Empleado: def init (self, nombre, departamento="general"): self.nombre = nombre self.departamento = departamento class Gestor(Empleado): def init (self, nombre): Empleado. init (self, nombre) self.informes = [] class Trabajador(Empleado): def init (self, nombre): Empleado. init (self, nombre) self.proyectos = [] class Comercial(Trabajador): def init (self, nombre, participacion=0.1): Trabajador. init (self, nombre) self.departamento = "ventas" self.participacion = participacion class Ingeniero(Trabajador): def init (self, nombre, area="mecánica"): Trabajador. init (self, nombre) self.departamento = "ingeniería" self.area = area Naturalmente, cada una de las clases tendría sus propios métodos que definirían comportamientos propios de cada clase o subclase, que no se han detallado en el ejemplo. Una alternativa a la herencia es la composición, en el que una clase se compone

14 de otras clases internas, y que puede ser una mejor alternativa en muchos casos. Encapsulación y grados de privacidad Uno de los principios que guían la POO, heredados de la programación modular, es el de encapsulación. Hemos visto cómo se puede agrupar comportamiento y datos gracias al uso de objetos, pero hasta el momento, tanto los atributos como los métodos que se definen en las clases correspondientes se convierten en métodos y atributos visibles para los usuarios de la clase (la API de la clase). Se dice que un método o atributo es público si es accesible desde el exterior de la clase, mientras que se denomina privado en caso contrario. Es deseable poder señalar qué métodos y atributos no deben utilizarse fuera de la clase para evitar exponer excesivamente los detalles de la implementación de una clase o un objeto. Python utiliza para ello convenciones a la hora de nombrar métodos y atributos, de forma que se señale su carácter privado, para su exclusión del espacio de nombres, o para indicar una función especial, normalmente asociada a funcionalidades estándar del lenguaje. _nombre Los nombres que comienzan con un único guión bajo indican de forma débil un uso interno. Además, estos nombres no se incorporan en el espacio de nombres de un módulo al importarlo con "from... import *". nombre Los nombres que empiezan por dos guiones bajos indican su uso privado en la clase. Por ejemplo, en la definición de clase siguiente: class ClaseA: def init (self, a) self. a = a self.x = self. a**2 + 2 self.y = self. a**3 + 3 el atributo a es de uso interno de la clase y no se exporta directamente. A continuación podemos ver cómo trata los atributos 'privados' python: >>> a = ClaseA(2) >>> dir(a) ['_ClaseA a', ' doc ', ' init ', ' module ', 'x', 'y'] >>> a. dict {'x':6, 'y':11, '_ClaseA a':2} Todavía es posible acceder a a, pero el nombre es transformado a '_ClaseA a', que lo señala como un atributo de uso privado. nombre Los nombres que empiezan y acaban con dos guiones bajos indican atributos "mágicos", de uso especial y que residen en espacios de nombres que puede

15 manipular el usuario. Solamente deben usarse en la manera que se describe en la documentación de python y debe evitarse la creación de nuevos atributos de este tipo. Algunos ejemplos de nombres "singulares" de este tipo son: init, método de inicialización de objetos del, método de destrucción de objetos doc, cadena de documentación de módulos, clases... class, nombre de la clase str, método que devuelve una descripción de la clase como cadena de texto repr, método que devuelve una representación de la clase como cadena de texto module, módulo al que pertenece la clase Se puede consultar la lista de atributos de este tipo y su descripción detallada en la documentación de python. Resúmen final La programación orientada a objetos enuncia la posibilidad de escribir un programa como un conjunto de clases de objetos capaces de almacenar su estado, y que interactúan entre sí a través del envío de mensajes. Las técnicas más importantes utilizadas en la programación orientada a objetos son: Abstracción: Los objetos pueden realizar tareas, interactuar con otros objetos, o modificar e informar sobre su estado sin necesidad de comunicar cómo se realizan dichas acciones. Encapsulación (u ocultación de la información): los objetos impiden la modificación de su estado interno o la llamada a métodos internos por parte de otros objetos, y solamente se relacionan a través de una interfaz clara que define cómo se relacionan con otros objetos. Polimorfismo: comportamientos distintos pueden estar asociados al mismo nombre Herencia: los objetos se relacionan con otros estableciendo jerarquías, y es posible que unos objetos hereden las propiedades y métodos de otros objetos, extendiendo su comportamiento y/o especializándolo. Los objetos se agrupan así en clases que forman jerarquías. Las clases definen el comportamiento y estado disponible que se concreta en los objetos. Los objetos se caracterizan por: Tener identidad. Se diferencian entre sí. Definir su comportamiento a través de métodos. Definir o reflejar su estado a través de propiedades y atributos. Gracias a la amable aportación de Óscar Carballal ahora es posible descargar una versión en PDF del artículo

16 "Programación orientada a objetos en Python" was published on November 22nd, 2006 and is listed in castellano, pascaline, programación, python. Follow comments via the RSS Feed Leave a comment Trackback URL Programación orientada a objetos en Python: 31 Comments 1. Just D wrote, Grandísimo artículo! Felicitaciones. Licenciás tus cosas bajo Creative Commons? Saludos. Link December 6th, 2006 at 1:11 pm 2. NKT wrote, Realmente muy interesante articulo. Me ha resuelto mucha de las dudas que tenia en cuanto a la jerarquia de clases en python (viniendo desde C++). Link February 28th, 2007 at 1:01 pm 3. Jose Fabrega wrote, Me parece que este articulo es de gran ayuda, para todo el que se inicia en la programacion con python, por tal motivo lo recomiendo abiertamente. Link August 16th, 2007 at 10:32 pm 4. henry wrote, buen articulo, sirve para aprender mucho y sacarlo de problemas. aunque falto algo mas de relacion entre clases Link October 16th, 2007 at 12:00 am 5. Gonzalo Sanchez wrote, Me gusto mucho tu articulo sobre POO, buen material has puesto y con muy buena capacidad de sistensis, te he linkeado desde mi blog, espero que no te moleste. El blog trata de programacion de video juegos usando python y pygame. la direccion del blog es Link February 12th, 2008 at 3:41 pm 6. pachi wrote, Gracias por vuestros comentarios, y me alegro de que os resulte útil. Link February 12th, 2008 at 6:13 pm 7. lopz wrote, hola Muy muy interesante, al fin entendí esto de las clases en python, me parecía un lio explicado de otra forma, sigue con el blog y a ver si te pones

17 una de python+pygtk o threads saludos! Link March 14th, 2008 at 8:39 pm 8. jhuss blog Programación orientada a objetos en Python wrote, [...] si alguno de esos temas parece interesante, pues visite el siguiente articulo del blog de RVBurke, Programación orientada a objetos en Python [...] Link March 24th, 2008 at 7:20 pm 9. weoz wrote, Buenas me gustaria saber donde puedo encotrar mas info sobre este tema en español.. gracias es que aun no entiendo muy bien los conceptps Link May 5th, 2008 at 10:11 pm 10. Eydolina wrote, Estuve leyendo un poco y me agrado la información es muy concreta.. gracias.. :p Link June 11th, 2008 at 4:01 pm 11. The Machine wrote, WOW, excelente. Muy buen articulo, felicitaciones. Si pudieras colocar otro de GUI en Python sería fenomenal. Link August 15th, 2008 at 7:58 am 12. ingemar wrote, muy buen aporte para la comunidad, te felicito esta muy especifico y concreto tambien tiene buen uso en la parte tecnica. sigue asi.. Link September 2nd, 2008 at 10:51 pm 13. cejota wrote, Hola, muy buen articulo. No encontre muchos en español que traten estos temas claramente. Seria mucho pedir, si pudieras ampliar o hacer uno nuevo, sobre el uso de namespaces y modulos? me enfrento al problema de tener directorios donde reparto las clases (modelos), las aplicaciones (scripts o clases donde tengo la logica) y config (datos especificos de la instalacion, entorno, y ubicacion en el SO de files), en config esta todos los datos especificos que pueden cambiar de maquina a

18 maquina o usuario a usuario, mas un directorio de datos, que serian los sources de lo que voy a procesar. el caso es que necesitaria poder cargar esa config (digamos que es un xml) pero lo primero que llamo es a una aplicacion, que deberia poder levantar los datos que necesite del xml. lo ideal seria tener un bootstrap, un punto comun de entrada donde cargue la config de entorno, y ahi vaya a la aplicacion, en donde ya sabra de donde cargar las clases y datos necesarios. podrias orientarme como se hace esto en python? uso por trabajo un framework en php que esta armado asi y ahi basta con poner el string del entorno deseado para que busque ese file.ejemplo si $user = claudio entonces config::env::$user.xml y busca en config/user/claudio.xml o import( config/env/.$user..php ); saludos Link April 13th, 2009 at 5:59 am 14. pachi wrote, Gracias por tu comentario cejota. Por ahora no tengo mucho tiempo para continuar esta serie de programación, pero tendré en cuenta tu sugerencia si algún día la retomo. En Python tienes mucha facilidad para hacer lo que preguntas, al ser bastante sencilla la organización de espacios de nombres y poder pasar de atributos a módulos o a clases sin necesitar cambios grandes en el código. No comprendo bien tu problema, pero si se trata de cargar distintos entornos en función de una clave tienes muchas formas de hacerlo. Busca en la red por dispatching. Link April 13th, 2009 at 1:15 pm 15. airus wrote, Está muy buena la introducción. Link June 15th, 2009 at 2:38 pm 16. Javier Albornoz wrote, Felicitaciones por el excelente trabajo! Es muy didáctico y por esta razón le estoy recomendando a mis estudiantes que visiten su espacio para que se documenten en el tema. Link July 7th, 2009 at 11:27 pm 17. adriana wrote, excelente trabajo, felicidades el articulo es claro y preciso para lo que necesitaba Link July 15th, 2009 at 1:16 am

19 18. Pato wrote, Muy buen artículo. Estoy empezando con python y me ha dado una buena base que no encontraba en otros manuales. Saludos desde Quito-Ecuador. Link July 30th, 2009 at 7:12 pm 19. Introduccion a la programación orientada a objetos con python :Blog de Alex Vera wrote, [...] visitar: Programación orientada a objetos en Python [...] Link October 26th, 2009 at 8:10 am 20. wozgeass wrote, buen articulo Link November 8th, 2009 at 3:58 am 21. Daniel wrote, wao pues no dejo de sorprenderme con este lenguaje, viniendo de java o c++ uno queda como sin piso, es sencillo, facil, sin embargo la forma de hacer programas como uno tiene la idea en java por lo menos, queda efimera o dispersa en python y en mi caso me siento perdido. :S gracias por el artículo serguiré leyendo. ciao Link November 28th, 2009 at 11:02 am 22. pachi wrote, Daniel, algo que te puede hacer sentir más cómodo en python es pensar que algunas de las exigencias de Java o C++ pueden ser parte de los comentarios en lugar de código. Por ejemplo, en el caso de los atributos de una clase, que suele resultar raro no tener que declararlos en el constructor, se pueden documentar en la docstring de la clase y listo. Link November 28th, 2009 at 12:15 pm 23. pizte wrote, Por fin un manual en español de clases! Debo reconocer que me resulta todavía bastante abstracto el tema de orientación a objetos, pero poco a poco le estoy cogiendo el truco, y este minihowto ha sido un gran avance. Felicitaciones por este buen trabajo. No te has enredado con explicaciones innecesarias que suelen venir en los manuales y lo has explicado de forma bastante gráfica. Para los que estáis preguntando por la programación de GUI s en Python, en la página de PyGTK tienen un manual traducido al español, que aunque no está muy actualizado (data de 2005, para GTK+ 2.4, ahora estamos en la 2.16) pero sirve perfectamente para empezar a hacer cosas útiles, ya que los cambios entre versiones no han

20 sido demasiado drásticos y todavía hay compatibilidad de funciones. Un saludo! P.D: Esta explicación de clases es lo que le falta al superlibro de la Universidad Jaume I para que sea el libro perfecto jeje Link December 24th, 2009 at 2:28 pm 24. mateu wrote, muchas gracias ha sido una definicion muy clara y práctica. Link January 15th, 2010 at 11:36 pm 25. m[cun] wrote, Muy interesante tu articulo lo agradezco. Debo decirte que tienes un error en el primer ejemplo llamas a la función print fecha(d, m, a) y por supuesto da una excepción ya que no esta declarada. la llamada correcta debe ser print dime_fecha(d, m, a) solo por si algún despistado abandona la guía al no funcionarle el 1º articulo saludos y gracias nuevamente Link September 13th, 2010 at 9:07 pm 26. pachi wrote, Muchas gracias m[cun] por tus comentarios. He corregido la errata que indicas. Link September 13th, 2010 at 10:46 pm 27. Germán wrote, Pachi, Muchísimas gracias por este artículo! Estoy comenzando a programar en Python, vengo del Fortran 77, y se me hacía una ensalada de definiciones en la cabeza esto de POO. Gracias a tu artículo, ahora las cosas están mucho más claras! Un fuerte abrazo, Germán. Link December 16th, 2010 at 7:19 pm 28. Heber wrote, Excelente, estoy apenas llegando a este lenguaje por pura afición y esto de las clases y los objetos no es fácil, pero luego de leer se me ha aclarado algo el panorama. Gracias. Link January 6th, 2012 at 2:23 am

21 29. gabo wrote, Excelente, Gracias el planeta es mejor con tutoriales como estos. Link February 9th, 2012 at 8:44 am 30. Albeiro wrote, Me ha resultado muy útil el tutorial, me ha permitido entender bien el asunto de clases y objetos Link December 12th, 2012 at 7:29 pm 31. Introducción a la programación orientada a objetos Código Rockiano wrote, [...] bien menciona Rafael Villar Burke en su blog, la algoritmia consiste en la búsqueda de soluciones a un problema concreto, pero no nos [...] Link January 24th, 2013 at 10:34 pm Leave Your Comment Name (required) (will not be published) (required) Website Your Comments RVBurke is proudly powered by WordPress. This blog is protected by Dave 's Spam Karma 2 : 664 Spams eaten and counting... Omit Needless Elements theme courtesy of WordPress Design & Blog Consulting

Introducción a la programación orientada a objetos con Python

Introducción a la programación orientada a objetos con Python Introducciónalaprogramaciónorientadaaobjetos conpython Notasacercadeesteartículo Esteartículohasidoextraídodelapáginawebhttp://blog.rvburke.comcumpliendoconlanormadecopyright establecida. Copyright RafaelVillarBurke,2006.Sepermiteladistribución,copiaymodificacióndelostextos,

Más detalles

Programación Orientada a Objetos en Python

Programación Orientada a Objetos en Python Programación Orientada a Objetos en Python La programación orientada a objetos nos propone un paradigma de programación. Paradigma: teoría cuyo núcleo central [...] suministra la base y modelo para resolver

Más detalles

PROGRAMACION ORIENTADA A OBJETOS EN C++

PROGRAMACION ORIENTADA A OBJETOS EN C++ PROGRAMACION ORIENTADA A OBJETOS EN C++ 1- INTRODUCCIÓN El lenguaje C++ representa el resultado de los esfuerzos realizados para proporcionar las ventajas de la programación Orientada a Objetos a un lenguaje

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Departamento de Computación Programación Orientada a Objetos Algoritmos y Programación II Junio, 2004 Las tecnologías de objetos hoy

Más detalles

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

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco ING1310 Introducción a la Computación Python Conceptos Básicos Carlos Reveco [email protected] [email protected] Facultad de Ingeniería/Universidad de los Andes/Chile Rev : 254 C.Reveco Facultad

Más detalles

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

Introducción a OOP. Programación Orientada a Objeto Introducción a OOP Programación Orientada a Objeto Evolución Programación no Estructurada, Programación procedimental, Programación modular y Programación orientada a objetos. Programación no Estructurada

Más detalles

Edwin Andrés Cubillos Vega

Edwin Andrés Cubillos Vega PROGRAMACION ORIENTADA A OBJETOS Edwin Andrés Cubillos Vega Company LOGO Contenido Introducción Clases y Objetos Herencia Constructores y Destructores Polimorfismo Contenido Introducción Clases y Objetos

Más detalles

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

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez 6 Herencia y Polimorfismo La Herencia y el Polimorfismo son dos de los principales mecanismos de programación que caracterizan a la programación orientada a objetos. La herencia sustenta su mecanismo en

Más detalles

Programación Orientada a Objetos Profr. Pedro Pablo Mayorga

Programación Orientada a Objetos Profr. Pedro Pablo Mayorga Actividad 3 Historia de los paradigmas de programación Unidad 1 Paradigma de programación Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No

Más detalles

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar

Más detalles

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

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA Implementación de conceptos P.O.O. en Java Temario 2. Conceptos de Programación Orientada a Objetos 1. Conceptos de P.O.O. 2. Implementación de conceptos P.O.O

Más detalles

Implementando TADs en Python

Implementando TADs en Python Implementando TADs en Python Luciano Leveroni Departamento de Computación, FCEyN, Universidad de Buenos Aires. 28 de Mayo del 2015 Introducción Cómo vimos en la teórica, los TADs nos permiten encapsular

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer [email protected] Diseño orientado a objetos El diseño orientado a objetos surge de la idea de traspasar a los sistemas de software,

Más detalles

Programación orientada a objetos

Programación orientada a objetos Programación orientada a objetos Dra. Elisa Schaeffer [email protected] 12 de febrero de 2007 MECAS512 Estructura de Datos en C++ PROGRAMACIÓN ORIENTADA A OBJETOS un paradigma de programación programa

Más detalles

Fundamentos de la POO 1

Fundamentos de la POO 1 Fundamentos de la POO 1 La correcta aplicación de los conocimientos de clases y objetos nos permitirán llegar a los objetivos planteados y a generar programas que puedan ser fáciles de comprender para

Más detalles

acceso Implementación de conceptos P.O.O. en Java Orientada a Objetos 2. Modificadores de en Java Temario

acceso Implementación de conceptos P.O.O. en Java Orientada a Objetos 2. Modificadores de en Java Temario Implementación de conceptos P.O.O. en Java Temario 2. Conceptos de Programación Orientada a Objetos 1. Conceptos de P.O.O. 2. Implementación de conceptos P.O.O en Java 1. Creación de clases y objetos 2.

Más detalles

INTRODUCCION A LA PROGRAMACIÓN ORIENTADA A OBJETOS

INTRODUCCION A LA PROGRAMACIÓN ORIENTADA A OBJETOS INTRODUCCION A LA PROGRAMACIÓN ORIENTADA A OBJETOS Introducción La programación orientada a objetos es un enfoque de programación de los más populares y viene teniendo gran aceptación en el desarrollo

Más detalles

Programación orientada a objetos I

Programación orientada a objetos I Introducción Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual [email protected] Qué es la POO? Un paradigma de programación Un paradigma es una forma de afrontar

Más detalles

Adentrándonos a la Programación

Adentrándonos a la Programación ! Adentrándonos a la Programación Definición de Algoritmo Es un conjunto pre-escrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos

Más detalles

PROGRAMACION ORIENTADA A OBJETOS: Tema 2. Conceptos básicos de la Programación Orientada a Objetos

PROGRAMACION ORIENTADA A OBJETOS: Tema 2. Conceptos básicos de la Programación Orientada a Objetos PROGRAMACION ORIENTADA A OBJETOS: Tema 2. Conceptos básicos de la Programación Orientada a Objetos Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina

Más detalles

INGENIERÍA DEL SOFTWARE

INGENIERÍA DEL SOFTWARE ESCUELA SUPERIOR POLITÉCNICA AGROPECUARIA DE MANABÍ MANUEL FÉLIX LÓPEZ CARRERA INFORMÁTICA SEMESTRE SÉPTIMO PERIODO ABR. /SEP.-2015 INGENIERÍA DEL SOFTWARE TEMA: RESUMEN#4: LENGUAJE UNIFICADO DE MODELADO

Más detalles

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

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos Academia de computación de IE, ICA e ISISA Unidad didáctica Programación Orientada a Objetos Elaboración y diseño de cien reactivos de opción múltiple para la unidad didáctica programación orientada a

Más detalles

Unidad Didáctica 5: Introducción a la Programación Orientada a Objetos

Unidad Didáctica 5: Introducción a la Programación Orientada a Objetos Unidad Didáctica 5: Introducción a la Programación Orientada a Objetos o Clases o Estructuras con funciones miembros. o Definición de una clase. o Constructores. o Tipos de constructores. o Sobrecarga

Más detalles

Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA

Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA Modalidad de realización del curso: Titulación: Online Diploma acreditativo con las horas del curso OBJETIVOS CONTENIDOS UNIDAD DIDÁCTICA 1. INTRODUCCIÓN A

Más detalles

PROGRAMACIÓN EN JAVA

PROGRAMACIÓN EN JAVA 1. INTRODUCCIÓN A LA PROGRAMACIÓN 1.1. Datos, algoritmos y programas 1.1.1. Definición de algoritmo 1.1.2. Datos 1.1.3. Características de un programa 1.2. Paradigmas de programación 1.2.1. Programación

Más detalles

Clases y objetos en python (Programacion Orientada a Objetos)

Clases y objetos en python (Programacion Orientada a Objetos) Clases y objetos en python (Programacion Orientada a Objetos) pythondiario.com /2014/10/clases-y-objetos-en-python-programacion.html Python es un lenguaje de programación orientada a objetos (POO). La

Más detalles

Lenguajes y paradigmas de programación

Lenguajes y paradigmas de programación Lenguajes y paradigmas de programación Temas Que es un programa? Que es un lenguaje de programación? Características de los lenguajes de programación Paradigmas de programación Que es un programa? La unión

Más detalles

Herencia. Implementación en Java

Herencia. Implementación en Java Herencia Implementación en Java Herencia Concepto de Herencia Es el mecanismo que permite definir nuevas clases partiendo de otras ya existentes. Las clases que derivan de otras heredan automáticamente

Más detalles

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador HERENCIA Y TIPOS. Las clases con propiedades y funciones comunes se agrupan en una superclase. Las clases que se derivan de una superclase son las subclases. Las clases se organizan como jerarquía de clases.

Más detalles

Introducción al Lenguaje "C++"

Introducción al Lenguaje C++ UNIDAD 2 Introducción al Lenguaje "C++" 1.- La programación Orientada a Objetos. La Programación Orientada a Objetos no es un concepto nuevo, data de hace unas dos decadas. El origen de la Programación

Más detalles

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

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores. Unidad IV Métodos. 4.1 Definición de un método. El polimorfismo, en programación orientada a objetos, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a través del mismo

Más detalles

Tema: Herencia en C#.

Tema: Herencia en C#. Programación II. Guía No. 8 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Herencia en C#. Objetivos Crear clases a través de la herencia de clases existentes. Describir

Más detalles

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java

! Fundamentos de la POO. ! Comportamiento y estado. ! Clases y objetos en Java Introducción a la programación orientada a objetos Curso de Programación en Java! Fundamentos de la POO! Comportamiento y estado! Clases y objetos en Java Contenidos Luis Guerra [email protected] Enero 2012

Más detalles

Tema 6: Clases. Índice

Tema 6: Clases. Índice Tema 6: Clases Antonio J. Sierra Índice 1. Fundamentos. 2. Declaración de objetos. 3. Asignación de objetos a variables referencia. 4. Métodos. 5. Constructores. 6. this. 7. Recogida de basura. 8. Modelado

Más detalles

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

POO. Por tanto, una clase nos permite crear varios objetos que pueden realizar la misma función o funciones diferentes. CURSO DE PHP. POO. Antes de entrar en detalle sobre los conceptos establecidos en la programación orientada, tendremos que establecer conceptos básicos para el estudiante conozca la terminología de la

Más detalles

Programación Orientada a Objetos (POO)

Programación Orientada a Objetos (POO) Programación Orientada a Objetos (POO) Introducción La programación orientada a objetos es una técnica de programación en la cual expresamos el código en términos relacionados a como vemos las cosas en

Más detalles

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez Introducción a Java Dr. (c) Noé Alejandro Castro Sánchez Programas Java Applets Pueden correr en navegadores Web Agregan funcionalidad a páginas Web Se llega a restringir su funcionalidad (e. g., no pueden:

Más detalles

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION CICLO: 01/ 2013 Nombre de la Practica: Lugar de Ejecución: Tiempo Estimado: MATERIA: GUIA DE LABORATORIO #13 Programación

Más detalles

Estructuras de Datos Dinámicas: Tipo de Dato Abstracto parte I. Programación I Departamento de Informática Universidad Nacional de San Luis Argentina

Estructuras de Datos Dinámicas: Tipo de Dato Abstracto parte I. Programación I Departamento de Informática Universidad Nacional de San Luis Argentina Estructuras de Datos Dinámicas: Tipo de Dato Abstracto parte I Programación I Departamento de Informática Universidad Nacional de San Luis Argentina Progreso de la Abstracción Los diferentes niveles de

Más detalles

COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO

COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO ELABORO: ALEJANDRA FUERTES FRANCISCO TEMA: LENGUAJES DE PROGRAMACIÓN INTRODUCCIÓN Un lenguaje de programación es un conjunto de instrucciones que

Más detalles

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Unidad V. Ya veremos qué poner en algunas_palabras y algo_más, por ahora sigamos un poco más. Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 1 Problemas, Soluciones y Programas Marcela Hernández Hoyos Solucionar un Problema = Construir un Programa Problema Programador Herramientas y Lenguajes Análisis

Más detalles

Tema: Herencia en C#.

Tema: Herencia en C#. POO. Guía No. 8 1 Tema: Herencia en C#. Facultad: Ingeniería Escuela: Computación Asignatura: Programación Orientada a Objetos Materiales y Equipo Computadora con Visual Studio /Visual C#. Guía Número

Más detalles

Programación Orientada o Objetos

Programación Orientada o Objetos Programación Orientada o Objetos Programación digital II Escuela de Sistemas Facultad de Ingeniería Profesor: Gilberto Diaz Programación Orientada a Objetos En 1970 Dennis Ritchie y Brian Kernigan crearon

Más detalles

Curso de PHP. Pascual Gómez del Pino Página 1

Curso de PHP. Pascual Gómez del Pino Página 1 Curso de PHP. Pascual Gómez del Pino Página 1 CLASES Y OBJETOS. PHP no es un lenguaje orientado a objetos, por lo menos en su totalidad. Pero PHP tiene la capacidad de definir clases y objetos. PROGRAMACIÓN

Más detalles

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

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia Programación orientada a objetos Resumen de Temas Unidad 5: Herencia 5.1 Introducción a la Herencia La herencia es el mecanismo fundamental de relación entre clases en la orientación a objetos. Relaciona

Más detalles

PHP orientado a objetos:

PHP orientado a objetos: PHP orientado a objetos: La mayoría de los lenguajes de programación modernos son orientados a objetos (abreviado OO) o en su defecto se aproximan mucho a éstos permitiendo algunas de sus características

Más detalles

Programación Orientada a Objetos en C++

Programación Orientada a Objetos en C++ Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase

Más detalles

Cada enfoque tiene sus ventajas y desventajas Cada uno es más apropiado para ciertas cosas

Cada enfoque tiene sus ventajas y desventajas Cada uno es más apropiado para ciertas cosas ADyA Hay para todos los gustos Estructurados (C, Pascal, Basic, etc.) Funcionales (CAML) Declarativos (Prolog) Orientados a Objetos (C#, VB.NET, Smalltalk, Java) Orientados a Aspectos Híbridos (Lisp, Visual

Más detalles

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACION CICLO: 01/ 2012 Nombre de la Practica: Lugar de Ejecución: Tiempo Estimado: MATERIA: GUIA DE LABORATORIO #10 Programación

Más detalles

Introducción. Introducción y conceptos de POO. En qué consiste la POO? Vocabulario. Definiciones

Introducción. Introducción y conceptos de POO. En qué consiste la POO? Vocabulario. Definiciones Introducción Fernández Universidad Autónoma de Madrid 20 de febrero de 2009 Introducción En qué consiste la Programación Orientada a Objetos? Vocabulario básico Ejemplo sencillo En qué consiste la POO?

Más detalles

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones

Más detalles

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript - Programación

Más detalles

Criterios de Evaluación

Criterios de Evaluación Criterios de Evaluación Se ha reconocido la importancia de la comunicación visual y sus principios básicos. Se han analizado y seleccionado los colores y tipografías adecuados para su visualización en

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM. Programación en Java Diciembre 2010 Índice 1 Introducción 2 Comportamiento y estado 3 POO en Java 4 Relaciones 5 Herencia

Más detalles

A3F. Objetos (uso) Carlos Fontela

A3F. Objetos (uso) Carlos Fontela Objetos (uso) Carlos Fontela [email protected] Temario Objetos y mensajes Objetos y clases Estado, comportamiento, identidad Historia hacia la POO POO vs. procedural 2c2009 2 Operando sobre objetos (Smalltalk)

Más detalles

Introducción y conceptos de POO

Introducción y conceptos de POO Fernández Universidad Autónoma de Madrid 20 de febrero de 2009 Introducción Introducción En qué consiste la Programación Orientada a Objetos? Vocabulario básico Ejemplo sencillo En qué consiste la POO?

Más detalles

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA

RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA RELACIÒN ENTRE LA PROGRAMACIÒN ORIENTADA A OBJETOS Y LA ESTRUCTURADA La Programación Orientada a Objetos toma las mejores ideas de la programación estructurada la combina con nuevos y poderosos conceptos

Más detalles

CLASE 9 -HERENCIA Y POLIMORFISMO

CLASE 9 -HERENCIA Y POLIMORFISMO CLASE 9 -HERENCIA Y POLIMORFISMO INTRODUCCIÓN Diferentes tipos de objetos con características y comportamiento comunes. lado1 lado2 lado3 color de línea color de relleno punto Triángulo Círculo radio color

Más detalles

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005 24 Noviembre 2005 disponibles de acceso public private protected de tipo static abstract final modificadores más avanzados que no vamos a ver... Clase Sintaxis modificadores class nombreclase{} Tipos primitivos

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

Introducción a Python Qué es Python?

Introducción a Python Qué es Python? Introducción a Python Qué es Python? Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Se trata de un lenguaje de programación

Más detalles

APLICACIONES MOVILES NATIVAS. Sesión 5: Objetos, mensajes y clases. Abstracción, encapsulamiento, herencia y polimorfismo

APLICACIONES MOVILES NATIVAS. Sesión 5: Objetos, mensajes y clases. Abstracción, encapsulamiento, herencia y polimorfismo APLICACIONES MOVILES NATIVAS Sesión 5: Objetos, mensajes y clases. Abstracción, encapsulamiento, herencia y polimorfismo Contextualización Los lenguajes de programación orientada a objetos tienen varios

Más detalles

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B) APRENDERAPROGRAMAR.COM CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha

Más detalles

Capítulo 3 CICLO DE VIDA DE UN PROGRAMA. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Capítulo 3 CICLO DE VIDA DE UN PROGRAMA. Presentación resumen del libro: EMPEZAR DE CERO A PROGRAMAR EN lenguaje C Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C" Autor: Carlos Javier Pes Rivas ([email protected]) Capítulo 3 CICLO DE VIDA DE UN PROGRAMA 1 OBJETIVOS Saber qué es la Ingeniería

Más detalles

Clases y Objetos en C++

Clases y Objetos en C++ Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar

Más detalles

UML: Diagrama de Clases

UML: Diagrama de Clases UML: Diagrama de Clases JUAN CARLOS CONDE RAMÍREZ INTRODUCTION TO PROGRAMMING Objetivos Entender el propósito de los diagramas de clases UML. Comprender la importancia de este tipo de diagramas para la

Más detalles

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

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación. Clase 3: 22/08/2016 Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación. Clase Una clase es un modelo que se utiliza para crear objetos

Más detalles

Lenguajes de Programación

Lenguajes de Programación Lenguajes de ción Bloque 1. Complemento a Tema 1 1. Historia 2. Paradigmas de programación 3. Fases creación de un programa 4. Traducción: compilación e interpretación 1ª Generación Ordenadores sólo entienden

Más detalles

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A. SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:

Más detalles

CONCEPTOS BÁSICOS PROGRAMACIÓN ORIENTADA A OBJETOS. Ing. Martha Tello

CONCEPTOS BÁSICOS PROGRAMACIÓN ORIENTADA A OBJETOS. Ing. Martha Tello CONCEPTOS BÁSICOS PROGRAMACIÓN ORIENTADA A OBJETOS Ing. Martha Tello Introducción Cuando hacemos referencia a la programación orientada a objetos estamos hablando de una nueva forma de pensar acerca del

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Programación Orientada a Objetos Capítulo 2 Comprender las definiciones de clase Tutor: Manuel Fernández Barcell Centro Asociado de Cádiz http://prof.mfbarcell.es 2.1 Máquina expendedora Los clientes

Más detalles

PHP5 Orientado a Objetos

PHP5 Orientado a Objetos PHP5 Orientado a Objetos Hola a todos, en esta ocasión les traigo a ustedes un poco de información acerca de las mejoras introducidas en PHP5 las cuales son principalmente la orientación a objetos que

Más detalles

Presentación del Curso Presencial. Programación en Java Nivel Básico

Presentación del Curso Presencial. Programación en Java Nivel Básico Presentación del Curso Presencial Programación en Java Nivel Básico Tabla de contenido Presentación del curso... 3 Objetivos de aprendizaje... 6 Contenidos del curso... 7 Competencias previas... 9 Recursos...

Más detalles

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE Los modificadores de acceso, como su nombre indica, determinan desde qué clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos:

Más detalles

Programación Dirigida a Objetos. MATERIAL COMPLEMENTARIO Tema 5.- Herencia

Programación Dirigida a Objetos. MATERIAL COMPLEMENTARIO Tema 5.- Herencia Tema 5.- Herencia 1. Herencia múltiple en C++: ambigüedad de nombres...2 2. Herencia en SMALLTALK...4 2.1. Determinación de los métodos a ejecutar: self y super...4 2.2. Herencia de métodos y variables

Más detalles