Metaprogramación con Python 3. Andrey Antukh github.com/niwibe
|
|
|
- María Teresa Olivares Soriano
- hace 8 años
- Vistas:
Transcripción
1 Metaprogramación con Python 3 Andrey Antukh github.com/niwibe
2 Las clases Consideramos esta clase como ejemplo: class Spam(object): def init (self, name): self.name = name def say_hello(self): print("hello {0}".format(self.name)) Podemos deducir estos datos: Nombre: Spam Bases: object Metodos: init y say_hello
3 Como se construye una clase? Como primer paso, se crea un dict donde se van a almacenar los atributos de clase: >>> cls_attrs = type. prepare () >>> type(cls_attrs) <class 'dict'>
4 Como se construye una clase? Como segundo paso, se extrae el body de la clase, o es decir lo que representa la definicion de los metoros y atributos: >>> body = """ def init (self, name): self.name = name def say_hello(self): print("hello {0}".format(self.name)) """
5 Como se construye una clase? Como tercer paso, se compila el body extraido y se rellena el contexto de la clase: >>> exec(body, globals(), clsattrs) >>> clsattrs {'say_hello': <function say_hello at 0x7f0b840e5e60>, ' init ': <function init at 0x7f0b840e5dd0>}
6 Como se construye una clase? Como cuarto paso, se crea un nuevo tipo: >>> Spam = type("spam", (object,), clsattrs) >>> Spam <class ' main.spam'> >>> instance = Spam("Andrey") >>> instance.say_hello() Hello Andrey
7 Que es metaclase? Metaclase, es la clase responsible de crear clases: class SomeMeta(type): def new (clst, name, bases, attrs): print("somemeta. new ", clst, name, bases, {}) return super(). new (clst, name, bases, attrs) def init (cls, name, bases, attrs): print("somemeta. init ", cls, name, bases, {}) super(). init (name, bases, attrs) def call (cls, *args, **kwargs): print("somemeta. call ", cls, args, kwargs) return super(). call (*args, **kwargs) class A(metaclass=SomeMeta): def new (cls, *args, **kwargs): print("a. new ", cls, args, kwargs) return super(). new (cls) a = A(2) def init (self, *args, **kwargs): print("a. init ", self, args, kwargs)
8 Que es metaclase? Ejecución en una shell interactiva: ~ python -i p1_meta.py SomeMeta. new <class ' main.somemeta'> A () {} SomeMeta. init <class ' main.a'> A () {} SomeMeta. call <class ' main.a'> (2,) {} A. new <class ' main.a'> (2,) {} A. init < main.a object at 0x7fc5f4b01b10> (2,) {} Que es cada cosa? meta. new : se encarga de crear la metaclase meta. init : se encarga de inicializar la metaclase meta. call : hace que la clase que se crea a partir de esta meta clase sea callable A. new : se encargade crear la instancia A. init : se encarga de inicializar la instancia
9 Que es metaclase? Metaclase Instancia de? Clase Instancia de? Objecto (instancia)
10 Constructor generico class Person(object): def init (self, first_name, last_name, birthday, location, zipcode, country, sex): self.first_name = first_name self.last_name = last_name self.birthday = birthday self.location = location self.zipcode = zipcode self.country = country self.sex = sex
11 Constructor generico Vamos a definir estructuras de datos y queremos eliminar la repeticion de definicion del metodo init.
12 Constructor generico Primera aproximación: from inspect import Signature, Parameter class Struct(object): _fields = [] def init (self, *args, **kwargs): params = [Parameter(field, Parameter.POSITIONAL_OR_KEYWORD) for field in self._fields] sig = Signature(params) bound_values = sig.bind(*args, **kwargs) for name, value in bound_values.arguments.items(): setattr(self, name, value) class Point(Struct): _fields = ["x", "y"]
13 Constructor generico Ejemplo de uso en una shell: ~ python -i example3-signatures.py >>> p = Point(2, 5) >>> p.x, p.y (2, 5) >>> p = Point(2, 7, z=2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "example3-signatures.py", line 12, in init bound_values = sig.bind(*args, **kwargs) File "/usr/lib64/python3.3/inspect.py", line 2036, in bind return bind_self._bind(args, kwargs) File "/usr/lib64/python3.3/inspect.py", line 2027, in _bind raise TypeError('too many keyword arguments') TypeError: too many keyword arguments
14 Comprobación de tipo de atributos Primera aproximación, usando properties: class Point(Struct): _fields = ["x", def x(self): return def x(self, value): if not isinstance(value, int): raise TypeError("unexpected type for x") self._x = value
15 Comprobación de tipo de atributos Ejemplos en la shell interactiva: >>> Point(2, 3) < main.point object at 0x7f10fd76a150> >>> Point(2.2, 3) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "x4_prop.py", line 16, in init setattr(self, name, value) File "x4_prop.py", line 29, in x raise TypeError("unexpected type for x") TypeError: unexpected type for x
16 Descriptores Segunda aproximación para comprobar los tipos usando descriptores: class Descriptor(object): def init (self, name=none): self.name = name def get (self, instance, cls): if instance is None: return self return instance. dict [self.name] def set (self, instance, value): instance. dict [self.name] = value def delete (self, instance): del instance. dict [self.name]
17 Descriptores class TypedDescriptor(Descriptor): _type = None def set (self, instance, value): if not isinstance(value, self._type): raise TypeError("unexpected type for {0}".format(self.name)) super(). set (instance, value)
18 Descriptores Aplicamos los descriptors a nuestra estructura de ejemplo: class Integer(TypedDescriptor): _type = int class Point(Struct): _fields = ["x", "y"] x = Integer("x") y = Integer("y") Observaciones: _fields sirve para el constructor. Los descriptores reciben repetidamente el nombre del atributo. Obtenemos el mismo comportamiento que con properties.
19 Descriptores con Metaclases Automatizamos ciertas partes de la creacion de clases de nuestras estructuras en el proceso de su definición (compilación): class MetaStruct(type): def prepare (cls, *args, **kwargs): return collections.ordereddict() def new (clst, name, bases, attrs): params = [] param_type = Parameter.POSITIONAL_OR_KEYWORD for name, attr in attrs.items(): if isinstance(attr, Descriptor): params.append(parameter(name, param_type)) attr.name = name attrs = dict(attrs) attrs[" signature "] = Signature(params) return super(). new (clst, name, bases, attrs)
20 Descriptores con Metaclases Automatizamos ciertas partes de la creacion de clases de nuestras estructuras en el proceso de su definición (compilación): class MetaStruct(type): def prepare (cls, *args, **kwargs): return collections.ordereddict() def new (clst, name, bases, attrs): params = [] param_type = Parameter.POSITIONAL_OR_KEYWORD for name, attr in attrs.items(): if isinstance(attr, Descriptor): params.append(parameter(name, param_type)) attr.name = name attrs = dict(attrs) attrs[" signature "] = Signature(params) return super(). new (clst, name, bases, attrs)
21 Descriptores con Metaclases Automatizamos ciertas partes de la creacion de clases de nuestras estructuras en el proceso de su definición (compilación): class MetaStruct(type): def prepare (cls, *args, **kwargs): return collections.ordereddict() def new (clst, name, bases, attrs): params = [] param_type = Parameter.POSITIONAL_OR_KEYWORD for name, attr in attrs.items(): if isinstance(attr, Descriptor): params.append(parameter(name, param_type)) attr.name = name attrs = dict(attrs) attrs[" signature "] = Signature(params) return super(). new (clst, name, bases, attrs)
22 Descriptores con Metaclases Ahora el constructor de la clase base de estructuras: class Struct(object, metaclass=metastruct): def init (self, *args, **kwargs): bound_values = self. signature.bind(*args, **kwargs) for name, value in bound_values.arguments.items(): setattr(self, name, value)
23 Descriptores con Metaclases Y así queda la definición final de estructuras, sin atributos innecesarios y sin repetir el nombre para los descriptores.: class Point(Struct): x = Integer() y = Integer()
24 Como afecta todo esto al rendimiento? Clase simple, con comprobación de tipos en el constructor: python -m timeit -s "import x2_sim as s" "x = s.point(2, 5)" loops, best of 3: 1.01 usec per loop Structura usando signaturas genericas y properties: python -m timeit -s "import x4_prop as s" "x = s.point(2, 5)" loops, best of 3: 61.6 usec per loop Structura usando signaturas genericas y descriptores: python -m timeit -s "import x5_desc as s" "x = s.point(2, 5)" loops, best of 3: 64.8 usec per loop Structura usando signaturas genericas, descriptores y metaclases: python -m timeit -s "import x6_meta as s" "x = s.point(2, 5)" loops, best of 3: 38.8 usec per loop
25 Generación dinamica código Para evitar la constante de resolcion de herencia de los descriptores, intentaremos generar en tiempo de definicion (compilación) el codigo del setter y del constructor: def _make_setter_code(descriptor): code = ["def set (self, instance, value):"] for cls in descriptor. mro : if "code" in cls. dict : for line in cls.code(): code.append(" " + line) return "\n".join(code) def _make_init_code(fields): code = ["def init (self, {0}):\n".format( ", ".join(fields))] for field in fields: code.append(" self.{0} = {0}\n".format(field)) return "".join(code)
26 Generación dinamica código Esto es lo que hacen las funciones para generar el setter y el constructor: python -i x7_exec.py >>> print(_make_init_code(["x", "y"])) def init (self, x, y): self.x = x self.y = y >>> print(_make_setter_code(point.x. class )) def set (self, instance, value): if not isinstance(value, self._type): raise TypeError('unexpected type') instance. dict [self.name] = value
27 Generación dinamica código Este es el aspecto que tendiria el nuevo decriptor: class DescriptorMeta(type): def init (cls, name, bases, attrs): if " set " not in attrs: exec(_make_setter_code(cls), globals(), attrs) setattr(cls, " set ", attrs[" set "]) return super(). init (name, bases, attrs) class Descriptor(object, def code(): return ["instance. dict [self.name] = value"] def get (self, instance, cls): if instance is None: return self return instance. dict [self.name]
28 Generación dinamica código Este es el aspecto que tendiria el nuevo decriptor: class DescriptorMeta(type): def init (cls, name, bases, attrs): if " set " not in attrs: exec(_make_setter_code(cls), globals(), attrs) setattr(cls, " set ", attrs[" set "]) return super(). init (name, bases, attrs) class Descriptor(object, def code(): return ["instance. dict [self.name] = value"] def get (self, instance, cls): if instance is None: return self return instance. dict [self.name]
29 Generación dinamica código Y este es el aspecto que tendria la clase base de las estructuras: class MetaStruct(type): def prepare (cls, *args, **kwargs): return collections.ordereddict() def new (clst, name, bases, attrs): fields = [k for k,v in attrs.items() if isinstance(v, Descriptor)] if fields: exec(_make_init_code(fields), globals(), attrs) for name in fields: attrs[name].name = name attrs = dict(attrs) return super(). new (clst, name, bases, attrs) class Struct(object, metaclass=metastruct): pass
30 Generación dinamica código Y este es el aspecto que tendria la clase base de las estructuras: class MetaStruct(type): def prepare (cls, *args, **kwargs): return collections.ordereddict() def new (clst, name, bases, attrs): fields = [k for k,v in attrs.items() if isinstance(v, Descriptor)] if fields: exec(_make_init_code(fields), globals(), attrs) for name in fields: attrs[name].name = name attrs = dict(attrs) return super(). new (clst, name, bases, attrs) class Struct(object, metaclass=metastruct): pass
31 Generación dinamica código Y este es el aspecto que tendria la clase base de las estructuras: class MetaStruct(type): def prepare (cls, *args, **kwargs): return collections.ordereddict() def new (clst, name, bases, attrs): fields = [k for k,v in attrs.items() if isinstance(v, Descriptor)] if fields: exec(_make_init_code(fields), globals(), attrs) for name in fields: attrs[name].name = name attrs = dict(attrs) return super(). new (clst, name, bases, attrs) class Struct(object, metaclass=metastruct): pass
32 Hemos mejorado en el rendimiento? Clase simple, con comprobación de tipos en el constructor: python -m timeit -s "import x2_sim as s" "x = s.point(2, 5)" loops, best of 3: 1.01 usec per loop Structura usando signaturas genericas y properties: python -m timeit -s "import x4_prop as s" "x = s.point(2, 5)" loops, best of 3: 61.6 usec per loop Structura usando signaturas genericas y descriptores: python -m timeit -s "import x5_desc as s" "x = s.point(2, 5)" loops, best of 3: 64.8 usec per loop Structura usando signaturas genericas, descriptores y metaclases: python -m timeit -s "import x6_meta as s" "x = s.point(2, 5)" loops, best of 3: 38.8 usec per loop Structura usando generación dinamica de codigo: python -m timeit -s "import x7_exec as s" "x = s.point(2, 5)" loops, best of 3: 2.08 usec per loop
33 Hemos mejorado en el rendimiento? Clase simple, con comprobación de tipos en el constructor: python -m timeit -s "import x2_sim as s" "x = s.point(2, 5)" loops, best of 3: 1.01 usec per loop Structura usando signaturas genericas y properties: python -m timeit -s "import x4_prop as s" "x = s.point(2, 5)" loops, best of 3: 61.6 usec per loop Structura usando signaturas genericas y descriptores: python -m timeit -s "import x5_desc as s" "x = s.point(2, 5)" loops, best of 3: 64.8 usec per loop Structura usando signaturas genericas, descriptores y metaclases: python -m timeit -s "import x6_meta as s" "x = s.point(2, 5)" loops, best of 3: 38.8 usec per loop Structura usando generación dinamica de codigo: python -m timeit -s "import x7_exec as s" "x = s.point(2, 5)" loops, best of 3: 2.08 usec per loop
34 Generar codigo a partir de estructuras en json Supongamos que tenemos la siguiente estructura de datos en json: [ ] { }, { } "name": "Foo", "fields": [ {"name": "foo", "type": "Integer"}, {"name": "bar", "type": "Integer"} ] "name": "Person", "fields": [ {"name": "age", "type": "Integer"} ]
35 Generar codigo a partir de estructuras en json Podemos generar codigo a partir de esa estructura: def _json_struct_to_code(struct): code = ["class {0}(_ts.Struct):".format(struct["name"])] for field in struct["fields"]: c = "{0} = _ts.{1}()".format(field["name"], field["type"]) code.append(" " + c) code.append("\n") return code def _json_to_code(filename): with io.open(filename, "rt") as f: data = json.load(f) code = ["import x7_exec as _ts"] for struct in data: code.extend(_json_struct_to_code(struct)) return "\n".join(code)
36 Generar codigo a partir de estructuras en json Este es el resultado: ~ python -i x8_json.py >>> print(_json_to_code("jsonstruct.json")) import x7_exec as _ts class Foo(_ts.Struct): foo = _ts.integer() bar = _ts.integer() class Person(_ts.Struct): age = _ts.integer()
37 Generar codigo a partir de estructuras en json Creamos la clase responsible de crear el modulo: import imp class JsonLoader(object): def init (self, filename): self._filename = filename def load_module(self, fullname): mod = imp.new_module(fullname) mod. file = self._filename mod. loader = self code = _json_to_code(self._filename) exec(code, mod. dict, mod. dict ) sys.modules[fullname] = mod return mod
38 Generar codigo a partir de estructuras en json Creamos la clase responsible de importar el fichero json: class StructImporter(object): def init (self, path): self._path = path def find_module(self, fullname, path=none): name = fullname.partition(".")[0] if path is None: path = self._path for dir in path: final_name = os.path.join(dir, "{0}.json".format(name)) if os.path.exists(final_name): return JsonLoader(final_name) return None import sys sys.meta_path.append(structimporter(sys.path))
39 Generar codigo a partir de estructuras en json Y este es el resultado: ~ python -i x8_json.py >>> import jsonstruct as jt >>> jt. file '/home/niwi/niwi-slides/meta-py3/sources/jsonstruct.json' >>> jt.person <class 'jsonstruct.person'> >>> jt.person(2) <jsonstruct.person object at 0x7ffb841b0a90> >>> jt.person(2.2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 2, in init File "<string>", line 3, in set TypeError: unexpected type
40 Generar codigo a partir de estructuras en json Y este es el resultado: ~ python -i x8_json.py >>> import jsonstruct as jt >>> jt. file '/home/niwi/niwi-slides/meta-py3/sources/jsonstruct.json' >>> jt.person <class 'jsonstruct.person'> >>> jt.person(2) <jsonstruct.person object at 0x7ffb841b0a90> >>> jt.person(2.2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 2, in init File "<string>", line 3, in set TypeError: unexpected type
41 Generar codigo a partir de estructuras en json Y este es el resultado: ~ python -i x8_json.py >>> import jsonstruct as jt >>> jt. file '/home/niwi/niwi-slides/meta-py3/sources/jsonstruct.json' >>> jt.person <class 'jsonstruct.person'> >>> jt.person(2) <jsonstruct.person object at 0x7ffb841b0a90> >>> jt.person(2.2) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 2, in init File "<string>", line 3, in set TypeError: unexpected type
42 Preguntas? Andrey Antukh github.com/niwibe
Entendiendo Decoradores en Python
Entendiendo Decoradores en Python El principio de todo Qué es un decorador? Funciones decoradoras Decoradores con parámetros Clases decoradores Decorar clases El principio de todo Todo en Python es un
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,
Diseño Basado en Componentes. Curso 2008 / 09
Beneficios de OOP Diseño Basado en Componentes Ingeniería Informática Universidad Carlos III de Madrid Programación Orientada a Objetos (OOP) en VB.NET Diseño Basado en Componentes. Curso Conceptos orientados
Informe de Segunda Presentación
UNIVERSIDAD DE TARAPACA ARICA Informe de Segunda Presentación Integrantes: José Báez Mª Francisca Chacana Carlos Galleguillos Pablo Vargas Introducción Python es un lenguaje de programación de alto nivel
Introducción a. Python. Unlux 2007. Facundo Batista. Introducci. Arte gráfico: Diana Batista. ó n a Python Unlux 2007
ón a Python Unlux 2007 Facundo Batista Arte gráfico: Diana Batista 1 Indice Qué es Python? Corriendo e interpretando Tipos de datos Controles de flujo Encapsulando código Tres detalles 2 Qué es Python?
Clase 5: CLI, templates y excepciones
Clase 5: CLI, templates y excepciones CLI: Línea de comandos Consideraciones básicas Shebang: Primera linea que se usa en *nix para que el SO sepa con que interprete ejecutar dicho archivo. Ejemplo de
Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU
Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU Contenido Interfaz Implementación Servidor Cliente Puesta en marcha de la aplicación: Compilador
PROCESOS DE RAZONAMIENTO INVERSO: PATRÓN DE DISEÑO ADAPTER EN PYTHON Y PHP, LOS
10 PROCESOS DE RAZONAMIENTO INVERSO: PATRÓN DE DISEÑO ADAPTER EN PYTHON Y PHP, LOS CÓMO Y LOS PARA QUÉ TIENES UN ENCHUFE DE TRES PATAS PERO UN TOMA CORRIENTE DE DOS. NECESITAS INSERTAR LA CLAVIJA EN EL
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
Tipos de Datos de python (1ª parte):
Tipos de Datos de python (1ª parte): Cuando almacenamos datos en una variable, lo que podemos hacer con ellos depende del tipo de datos que sean. Si tengo los datos 1 y 2 y hago 1+2 obtendré como resultado
Tema 2: Introducción a Python
Tema 2: Introducción a Python Carmen Graciani Díaz José Luis Ruiz Reina Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Inteligencia Artificial, 2015-16 Introducción
Introducción a PYTHON. Cesar Husillos & Víctor Terrón. Abril de 2014
Introducción a PYTHON Cesar Husillos & Víctor Terrón IAA-CSIC Abril de 2014 Cesar Husillos & Víctor Terrón (IAA-CSIC) Módulos Abril de 2014 1 / 59 Índice 1 Overview 2 Organización 3 Reutilización 4 Cómo
Bloque IV: Usos avanzados
Bloque IV: Usos avanzados 1. Subiendo archivos 2. Constantes mágicas 3. Métodos mágicos 4. Autoloading 5. Reflection 6. Objetos como arrays Desarrollo web avanzado con PHP5 Bloque IV: Usos avanzados 1.
Curso de Python Inicial
Logo IAA-CSIC Curso organizado por el Gabinete de Formación del CSIC Curso de Python Inicial Clases Contenidos 1. Paradigmas de la Programación 2. Programación Orientada a objetos 3. Clases 4. Objetos
CEFIRE: Curso Administración de APACHE
CEFIRE: Curso Administración de APACHE Práctica introducción al PHP PHP, acrónimo de "PHP: Hypertext Preprocessor", es un lenguaje "Open Source" interpretado de alto nivel, especialmente pensado para desarrollos
SHELL SCRIPTING: ANÁLISIS DE ARGUMENTOS
3 SHELL SCRIPTING: ANÁLISIS DE ARGUMENTOS ENVIADOS POR LÍNEA DE COMANDOS MEDIANTE PYTHON CON ARGPARSE ARGPARSE ES UN MÓDULO DE LA LIBRERÍA ESTÁNDAR DE PYTHON, QUE REEMPLAZANDO A OPTPARSE DESDE LA VERSIÓN
La sintaxis básica para definir una clase es la que a continuación se muestra:
DEFINICIÓN DE CLASES Y OBJETOS EN C# Sintaxis de definición de clases La sintaxis básica para definir una clase es la que a continuación se muestra: class nombreclase miembros De este modo se definiría
en otra máquina exactamente de la misma manera que si se encontrará en la misma máquina
Máquina A Máquina B Máquina C Lo ideal sería tener un sistema distribuido orientado a objetos que permita: 1)Invocar un método de un objeto que se localiza en otra máquina exactamente de la misma manera
2.2 Nombres, Ligado y Ámbito
2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el
Descripción y Contenido del Curso. Programación C++ Capacity Academy.
Descripción y Contenido del Curso Programación C++ Capacity Academy Educación en Tecnología de la Información Online, Efectiva y Garantizada Qué aprenderá si toma este Curso? En este curso aprenderás todo
El lenguaje de programación Java
Departament d Arquitectura de Computadors El lenguaje de programación Java Java (I) Orientado a objetos Ejecutado por una maquina virtual Independiente de la plataforma Multithreaded Orientado a la red
Programación Funcional Avanzada
Programación Funcional Avanzada Procesamiento de Texto Estructurado Ernesto Hernández-Novich Universidad Simón Bolívar Copyright 2010-2015 Hernández-Novich (USB) Programación Funcional Avanzada
JAVA RMI (REMOTE METHOD INVOCATION)
JAVA RMI (REMOTE METHOD INVOCATION) RMI RMI (Remote Method Invocation) Mecanismo RPC de Mecanismo mediante el cual los procesos cliente y servidor en una aplicación distribuida se comunican Una aplicación
pytod, un prototipo experimental para realizar Depuración Omnisciente a scripts escritos en el Lenguaje de Programación Python
pytod, un prototipo experimental para realizar Depuración Omnisciente a scripts escritos en el Lenguaje de Programación Python Milton Galo Patricio Inostroza Aguilera Objetivos de la charla Mostrar el
Herencia. Hay clases que comparten gran parte de sus características.
Herencia Hay clases que comparten gran parte de sus características. El mecanismo conocido con el nombre de herencia permite reutilizar clases: Se crea una nueva clase que extiende la funcionalidad de
Clase adicional 2. Estructuras básicas de control. Temas
Clase adicional 2 Temas Estructuras de control Sentencia condicional Iteración Clases Definir una clase Crear una instancia de una clase Campos estáticos Problemas de la clase adicional Problema de diseño
Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo
Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad Complutense
ASP.NET MVC 3 ofrece una serie de herramientas y funciones para construir una aplicación utilizando sólo la definición de los objetos del modelo.
Gerardo Grinman 5D ASP.NET MVC 3 ofrece una serie de herramientas y funciones para construir una aplicación utilizando sólo la definición de los objetos del modelo. Una vez que tenemos pensado el problema
Tema 5 Diseño con Glade
Tema 5 Diseño con Glade Curso de Python Avanzado Juan Pedro Boĺıvar Puente Instituto Andaluz de Astrofísica Mayo de 2011 Juan Pedro Boĺıvar Puente (Instituto Andaluz de Astrofísica) Tema 5 Diseño con Glade
MICROSITIOS. Perfiles
MICROSITIOS Perfiles API para el consumo de servicios encargados de la creación, visualización, edición, eliminación y demás operaciones sobre los perfiles de usuarios de Metaportal. METAPORTAL 18/07/2014
15. Parámetros o argumentos
Programación orientada a objetos con Java 161 15. Parámetros o argumentos Objetivos: a) Profundizar en el concepto de parámetro de una clase e indicar su mecanismo de funcionamiento. b) Interpretar el
Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría
Java en 3 horas Ampliación de Sistemas Operativos Rodrigo Santamaría Generalidades Desarrollado por Sun Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas
Laboratorio de Aplicaciones Telemáticas
Java Server Pages (JSP) Laboratorio de plicaciones Telemáticas Jesús rias Fisteus [email protected] Curso 2007/2008 Edited with emacs + LT E X+ prosper Universidad Carlos de adrid V E S E Java Server Pages
Fundamentos de la Programación Orientada a Objetos Definición de Clases
Fundamentos de la Programación Orientada a Objetos Definición de Clases Programación Orientada a Objetos Facultad de Informática Dep. Ingeniería del Software e Inteligencia Artificial Universidad Complutense
MANUAL DE RUBY (PARTE V) Luis José Sánchez González
MANUAL DE RUBY (PARTE V) Luis José Sánchez González 1. VARIABLES DE CLASE Hemos visto anteriormente las variables de instancia. Cuando se crean instancias a partir de una clase invocando al método new,
Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877
Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877 Objetivo: Conocer la estructura y características de la tarjeta con un microcontrolador PIC que se dispone
Python 3000. Facundo Batista. Gracias especiales a nessita por su indispensable ayuda con LaTEXpara esta presentación
Python 3000 Facundo Batista Gracias especiales a nessita por su indispensable ayuda con LaTEXpara esta presentación Python queloqué? Evolución normal Versiones: Python x.y.z x: mayor y: menor z: bugfix
1. Generación automática de documentación (javadoc)
Índice 1. Generación automática de documentación (javadoc)... 1 1.1 Introducción... 1 1.2 La herramienta Javadoc... 1 1.3 Comentando el código Java... 1 2 Guía de estilo de Java... 5 2.1 Clases... 6 2.2
INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)
APRENDERAPROGRAMAR.COM INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión:
Conexión SQL Server y C# (Consola)
Conexión SQL Server y C# (Consola) Objetivo: Manejar bases de datos usando SQL Server, creando tablas dentro una base de datos y esto a su vez enlazarlo a una aplicación de C#, haciendo uso del método
Tema 7.- Fundamentos de la Programación Orientada a Objetos
Tema 7.- Fundamentos de la Programación Orientada a Objetos 7 de enero de 2014 Objetivos Saber definir clases propias. Saber crear objetos de una clase determinada e interactuar con ellos (Problema 1).
Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)
aprenderaprogramar.com Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A) Sección: Cursos Categoría: Curso Visual Basic Nivel I Fecha revisión: 2029 Autor: Mario R. Rancel
Programación orientada a objetos
Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Clase! Objeto! Atributo o variable de instancia! Método! Instanciar/crear un objeto!
Tutorial: Python + Soap Web Service. Daniel Montenegro Cordero
Tutorial: Python + Soap Web Service Daniel Montenegro Cordero Python - Lenguaje de programación interpretado. - Filosofia código legible. - Permite programación orientada a objetos, imperativa y funcional.
LABORATORIO Nº 6 SUMA DE DOS NUMEROS EN POWER BUILDER
Estimados Estudiantes: A continuación se detallan los pasos para realizar un programa para sumar dos numeros utilizando el lenguaje de programación Power Builder. PASO 1.- Creamos un workspace, hacemos
Serialización de datos en C# en Binario, Soap y Xml
Serialización de datos en C# en Binario, Soap y Xml Quizás muchos desarrolladores hayan escuchado hablar del termino serializar la información y no saber de que se trata. Pues bien, resulta que la serialización
Algorítmica. Curso 2009/2010. Seminario de Python 3 y El problema del Río Congo
Algorítmica Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Curso 2009/2010 Seminario de Python 3 y El problema del Río Congo Python 3 Objetivos Familiarizarnos con
Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos
Lección 2: Creando una Aplicación en Java 1. Estructura del archivo de una clase 2. Usando una clase 3. Definiendo clases fundamentos Objetivos Conocer: La forma en la cual está se está estructurado el
QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B)
APRENDERAPROGRAMAR.COM QUÉ ES UNA CLASE JAVA? ATRIBUTOS (PROPIEDADES O CAMPOS), CONSTRUCTOR Y MÉTODOS. (CU00623B) Sección: Cursos Categoría: Curso Aprender programación Java desde cero Fecha revisión:
Tema 4.- Pilas y Colas
Apuntes elaborados por: Eduardo Quevedo, Raquel López y Aaron Asencio Revisado por: Javier Miranda el???? Tema 4.- Pilas y Colas Las pilas y colas son estructuras de datos que se utilizan generalmente
Reflection (Reflexión)
Reflection () La reflexión permite obtener información sobre el contenido de un assembly a partir de sus metadatos, en concreto permite: - Obtener información dinámicamente de todos los tipos de un assembly.
Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE
Contenidos 1. Introducción 2. El operador NEW 3. El operador DELETE 1 Introducción Hasta ahora hemos visto que cada vez que queremos usar una variable debemos reservarle un lugar de la memoria al comenzar
Python hasta en los Rincones
Python hasta en los Rincones o como una serpiente se puede comer un león Uso de Python en el proyecto Meer para la generación automática de aplicaciones para terminales móviles inteligentes a partir de
ArcGIS Pro SDK for.net. Fernando Virgili
ArcGIS Pro SDK for.net Fernando Virgili Temario Introducción ArcGIS Pro. Que es el ArcGIS Pro SDK? Conceptos y Componentes - DAML - Demo Mapa, Layer y Simbolización - Demo Geodatabase - Demo Edición -
Las plantillas permiten definir funciones genéricas.
Introducción (Genericidad). Plantillas de funciones o funciones genéricas. Sintaxis de plantillas. Ejemplos de declaraciones. A tener en cuenta Un ejemplo de plantilla de funciones: Máximo de un vector.
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
Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto
Programación Orientada a Objetos con Java Rafael Rivera López Elementos Básicos del Lenguaje Java II Ingeniería en Sistemas Computacionales Agosto-Diciembre de 24 Veracruz, Ver. Creación de un objeto Una
Ficheros y streams. Desde el punto de vista de Java, cada fichero no es más que una secuencia o flujo de bytes [stream].
Ficheros y streams Desde el punto de vista de Java, cada fichero no es más que una secuencia o flujo de bytes [stream]. Los streams pueden ser de entrada () de salida (). Los ficheros pueden almacenar
Generics y Visual Basic.NET
Por Guillermo Guille Som Visual Basic MVP desde 1997 www.elguille.info Generics y Visual Basic.NET Es mucho lo que se ha escrito (y seguramente se seguirá escribiendo) sobre esta nueva característica de
GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL
GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL Conceptos, historia y contexto http://dev.mysql.com/doc/refman/5.0/es/stored-procedures.html Los procedimientos almacenados y funciones son nuevas
Prof. Dr. Paul Bustamante
Prácticas de C++ Practica Nº 5 Informática II Fundamentos de Programación Prof. Dr. Paul Bustamante Practica Nº 5 Programación en C++ Pág. 1 ÍNDICE ÍNDICE... 1 1. Introducción... 1 1.1 Ejercicio 1: Mi
Dentro del.net los eventos se utilizan para notificar a nuestros objetos que se ha producido algún tipo de hecho al que nos hemos suscrito.
Eventos ala.net Recientemente ha surgido en los grupos de C# una duda sobre si los eventos que usa el.net son del mismo tipo que los que nosotros podemos crear y usar. La respuesta obvia y evidente es
Java en 2 horas. Rodrigo Santamaría
+ Java en 2 horas Rodrigo Santamaría + Generalidades 2 Desarrollado por Sun en 1995 Hereda mucha de la sintaxis de C (1972) Fuertemente tipado y orientado a objetos Aplicaciones compiladas a bytecode Gestión
INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)
APRENDERAPROGRAMAR.COM INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C) Sección: Cursos Categoría: Lenguaje de programación Java nivel
Nano Taller de Python
Charla 4: Programación Orientada a Objetos Royal Institute of Technology (KTH), Estocolmo, Suecia Grupo de Nanomateriales (GNM), Santiago, Chile 13 de enero 2009, de 10:00 a 11:00
Álgebra y Matemática Discreta Sesión de Prácticas 1
Álgebra y Matemática Discreta Sesión de Prácticas 1 (c) 2013 Leandro Marín, Francisco J. Vera, Gema M. Díaz 16 Sep 2013-22 Sep 2013 Estructuras Algebraicas La Estructura como Variable Tenemos una gran
Práctica 1: sockets en Python
Práctica 1: sockets en Python Álvaro Navarro [email protected] Jesús M. González-Barahona [email protected] Infraestructura de Redes 5 o Ingeniería Informática 08/09 1. Fase 1: Cliente UDP Esta primera fase tiene
Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.
CAPÍTULO 5 H E R E N C I A 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Qué ventajas ofrece la herencia a un programador? Cuál es la diferencia entre herencia simple y herencia múltiple?
Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4
Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 by S. Muñoz-Gutiérrez [email protected], [email protected] Grupo LINDA Facultad de Ingeniería UNAM México Octubre-Diciembre 2009 Identificando
b) Qué tipo de variable son las de la línea 6? Cuál es su visibilidad? Explique su
Universidad de La Laguna. Escuela Técnica Superior de Ingeniería Informática Tercero del Grado de Informática LENGUAJES Y PARADIGMAS DE PROGRAMACION. SEGUNDA PARTE 5 páginas Nombre: Alu: 1. Cuál es la
Manual del entorno de integración continua
Manual del entorno de integración continua Última versión del documento: http://oriolrius.cat/blog/2010/04/22/integracio-continua Actualizaciones: 2010/04/22 Oriol Rius - Inicial Autor: Oriol Rius
Introducción a la Computación. Python avanzado. Maximiliano Geier. Facultad de Ciencias Exactas y Naturales, UBA 24/06/2015
Introducción a la Computación Python avanzado Maximiliano Geier Facultad de Ciencias Exactas y Naturales, UBA 24/06/2015 Maximiliano Geier (UBA) Python avanzado 24/06/2015 1 / 32 Programando a lo Python
Programación Orientada a Objetos en Java
Programación Orientada a Objetos en Java Curso 2006-2007 Tema 3 Clases y Objetos Gonzalo Méndez Pozo Dpto. de Ingeniería de Software e Inteligencia Artificial Universidad Complutense de Madrid Clases y
INSTRUMENTACIÓN N AVANZADA. ARRAYS EN LABVIEW Relacionando Datos Arrays y Clusters
ARRAYS EN LABVIEW Relacionando Datos Arrays y Clusters Objetivos 1. Event Structure 2. Arrays 3. Funciones 4. Ejercicios 5. Cluster 6. Simulación de adquisición de señales de tensión 7. Adquisicion de
El lenguaje de Programación C. Fernando J. Pereda <[email protected]>
El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por
Clase 4: Modularizando código
Clase 4: Modularizando código Ejercicio preparatorio: Determinar si un número es primo o no El siguiente código verifica si un número es primo. Hay muchas maneras de hacer esto y esta está lejos de ser
Escrito por Renan Huanca Sábado, 28 de Febrero de 2009 06:46 - Actualizado Sábado, 28 de Febrero de 2009 09:09
Hola java adictos, Esta vez mostrare como crear una aplicacion Spring con Maven :) Descripción del Ejemplo Se creara una aplicacion que simplemente mostrar "Hello World with Spring :)". El mensaje sera
Node.JS: Plataforma de fácil programación de servidores para aplicaciones de red escalables
Redes de Computadores I Informe de Proyecto Node.JS: Plataforma de fácil programación de servidores para aplicaciones de red escalables Profesor Integrantes Agustín González Claudio Campusano Nicolas Fredes
INGENIERÍA DE SOFTWARE:
30 INGENIERÍA DE SOFTWARE: WRAPPERS Y DECORADORES EN PYTHON EN EL MUNDO DE LA INGENIERÍA DE SISTEMAS, PYTHON ES UNO DE LOS LENGUAJES MÁS TEMIDOS Y RESPETADOS. EL RESPETO, NO ES ALGO QUE DEBA PERDERSE,
Workshop: Behavior Driven Development (BDD) in JavaScript
Workshop: Behavior Driven Development (BDD) in JavaScript Este documento le guiará paso a paso en el desarrollo de las actividades del presente Workshop para alcanzar el objetivo planteado. Objetivo Hacer
Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle
Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión
PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos
ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 4 Programación Orientada a Objetos Contenido Introducción...1 Objeto...2 Atributo...2 Métodos...2 Clase...3
PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases
PHP y MySQL Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases Herencia de Objetos La herencia permite crear muchas clases que son similares entre si, sin tener
Ejecutando SAS desde EXCEL:
Ejecutando SAS desde EXCEL: Una Aplicación en Administración de Datos Wilson Mayorga [email protected] Introducción Es una poderosa herramienta para administrar grandes volúmenes de información.
1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)
. Sobrecarga de operadores. unarios Operador de incremento (prefijo). Devolución de objetos en los métodos. Retorno por referencia Sobrecarga de operadores Los operadores aceptan uno o varios operandos
class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }
REUTILIZACIÓN DE CLASES:MODELO DE HERENCIA EN JAVA Java soporta herencia simple pero no múltiple. Lo hace mediante el mecanismo de extensión de clase. A partir de él, una subclase se extiende (hereda)
Programación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVA Jorge Pérez Introducción a la Computación Jorge Pérez Programación Orientada a Objetos en JAVA 1 / 36 Orientación a Objetos OO es un paradigma de modelación y programación
Conceptos de Programación Orientada a Objetos
Paradigmas de programación Prog. orientada a objetos Conceptos de Programación Orientada a Objetos Abstracción de Programación estructurada Programación imperativa 2 Programación estructurada (I) Programación
Imprimir PDF en WebDynpro para JAVA sin utilizar Interactive Forms en llamadas RFC.
Imprimir PDF en WebDynpro para JAVA sin utilizar Interactive Forms en llamadas RFC. Se puede imprimir un pdf utilizando una llamada RFC el cual entregará el pdf vía una variable binaria. Entonces si en
Resumen Lenguaje Java
Resumen Lenguaje Java Comentarios Elementos del Lenguaje De una sola línea // comentario De varias líneas /* Este es un comentario de varias líneas */ Comentarios para Javadoc /** * The Example class */
03.04 Unity. Integración de Sistemas. Parte II. Diseño e implementación de aplicaciones Web con.net
03.04 Unity Integración de Sistemas Parte II. Diseño e implementación de aplicaciones Web con.net Contenido Conocer y saber utilizar el contenedor Unity Aprender a registrar tipos desde código y desde
