Lenguaje + Librería de clases + Entorno de desarrollo

Slides:



Advertisements
Presentaciones similares
IfTrue- ifFalse Sea el mensaje: ifTrue: bloque1 ifFalse: bloque2 enviado tanto para true como para false, donde las variables bloque1 y bloque2 son bloques.
Advertisements

Envio de .
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 6: CREACIÓN Y USO DE OBJETOS Ing. Ronald Criollo.
POLIMORFISMO UNIDAD 4.
Lenguaje PHP Capítulo 4.
Fundamentos de la programación orientada a objetos
Creación y destrucción de objetos
Jose García Moreno-Torres
Interpretando objetos
El proceso de desarrollo de software
Introducción Abdelahad, Corina Natalia Abdelahad, Yanina Zoraida
Desarrollo de Aplicaciones para Internet
GENERACIONES DE LENGUAJES DE PROGRAMACIÓN
Variable Una variable es un nombre que se asocia con una porción de la memoria del ordenador, en la que se guarda el valor asignado a dicha variable. Expresión.
PROGRAMACION ORIENTADA A OBJETOS
ORIENTADO A OBJETOS ESTUDIANTE JESSICA LORENA LEAL MEDINA INGENIERIA DE SOFTWARE PROGRAMA INGENIERIA DE SISTEMAS UNIVERSIDA COOPERATIVA DE COLOMBIA NEIVA-HUILA.
Ruby Rodrigo Cornejo Mejías Jonathan Cea Chávez Marcelo Gómez Gonzales
Algoritmo y Estructura de Datos I I Facultad de Ingeniería y Arquitectura Ing. Juan José Montero Román. Sesión 11.
POO (Programación Orientada a Objetos)
HERENCIA.
Java. Objeto Es la instancia de una clase. Cada objeto se crea utilizando la palabra reservada new. Un objeto es conocido como una instancia. Ejemplo.
Lic. Rosemary Torrico Bascopé
PROGRAMACIÓN ORIENTADA A OBJETOS
Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos
Tema 6: Clases Antonio J. Sierra.
Ing. Eddye Sánchez Castillo. Dentro de la etiqueta se debe utilizar los atributos: Action Method Action Action: Se utiliza para indicar el sitio Web donde.
6. Herencia. Clases abstractas. Genericidad
Curso Programación en Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Sintaxis de C# (Declaraciones y Tipos)
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Introduccion al videojuego Gabriel De Ioannes Becker Clase 12.
Control de errores visual basic
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
Herencia y tipos ● Cuanta memoria se debe asignar a un objeto cuando se asigna en la pila ● La asignación debe hacerse antes de que se conozca la cantida.
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
Módulo 7: Programación Orientada a Objetos en Visual Basic 2005.
Metodología de Programación Ayudantía 4 lelagos.ublog.cl 2008.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
Programación orientada a objetos. La programación orientada a objetos es un conjunto de normas, que se basan en la idea de construir un software de forma.
Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005.
Paradigmas de Lenguajes de Programación Smalltalk (Parte II) 1 er cuatrimestre de 2007.
Introduccion al videojuego Gabriel De Ioannes Becker Clase 07.
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
Programación orientada a objetos
Tratamiento de excepciones
Metodología de Programación Clase 1 Leonel Lagos V
CONCEPTOS.
HERENCIA.
Programación Java y Desarrollo de Aplicaciones Modulo 1 Arquitectura de ordenadores Tema 3 Programas.
Introducción a Java Sintaxis de Java QUIMESTRE II PARCIAL I.
El titulo Lo cualo?.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Introducción al entorno de C Sharp. Temario Introducción a.Net I.- Introducción a.Net – ¿Que es.Net? – Componentes Fundamentales Introducción y Entorno.
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
2 Historia. El perfil de Java. Los padres de Java son James Gosling (emacs) y Bill Joy (Sun) Java desciende de un lenguaje llamado Oak cuyo propósito era.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
U niversidad de G uadalajara Centro Universitario de Ciencias Exactas e Ingenierías Ponentes: Muñoz Guzmán Ramón Gallardo Olivares Mario Solís Flores José.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Hablando la gente se entiende (y las cosas también) o una breve introducción a Smalltalk ESTARÍA BUENO USAR SMALLTALK.
TITULO 1 Titulo 2. TITULO 1 Titulo 2.
Clase 1. Clase 7 Clase 8.
Clase7: Objetos y Clases
Titulo El mejor.
TITULO 1 Titulo 2. TITULO 1 Titulo 2.
Lenguaje de Programación I
TITULO 1 Titulo 2. TITULO 1 Titulo 2.
Clase
Transcripción de la presentación:

Lenguaje + Librería de clases + Entorno de desarrollo Smalltalk Lenguaje + Librería de clases + Entorno de desarrollo Lenguaje: Sintaxis muy simple, “English-based” Todo es un objeto (incluso los números) Todo proceso se hace enviando mensajes a objetos (incluso las estructuras de control) Sólo hay cinco palabras reservadas (false, true, nil, self, super) y dos instrucciones (asignación y mensaje) Tipado dinámicamente. Soporta herencia simple Soporta el concepto de metaclase

Ejemplo Clase “Cuenta (1/3) Object subclass: #Cuenta instanceVariableNames: 'titular codigo saldo ultOper' classVariableNames: 'SaldoMinimo' poolDictionaries: '' "Metodos de Clase” abrirCuenta ^self new abrirCuenta saldoMinimo: cantidadPts SaldoMinimo:= cantidadPts Ejemplo Clase “Cuenta (1/3)

Ejemplo Clase “Cuenta (2/3) “Métodos de instancia” ingreso: cantidadPts " Ingresa en la cuenta, cantidadPts" saldo:=saldo+cantidadPts reintegro: cantidadPts " Retira de la cuenta, si es posible, cantidadPts" ((saldo-cantidadPts)>SaldoMinimo) ifTrue: [saldo:=saldo-cantidadPts] ifFalse: [^self invalidMessage] saldo "Devuelve el saldo de la cuenta" ^saldo Ejemplo Clase “Cuenta (2/3)

Ejemplo Clase “Cuenta (3/3) abrirCuenta “Inicializamos un objeto cuenta” |s res| titular := Persona new altaPersona. s:=0. [s<SaldoMinimo] whileTrue:[ res:=(Prompter prompt: '¿Saldo Inicial? 'default: ''). res isNil ifTrue: [^self error] ifFalse:[(res sonDigitos) ifTrue: [s:=res asInteger] ifFalse: [s:=0]]]. saldo:=s. (codigo:= Prompter prompt: '¿Codigo de la cuenta? ' default: '') isNil ifTrue: [^self error]. ultOper:= Array new. Ejemplo Clase “Cuenta (3/3)

Ejemplo: Objeto “Cuenta” Un objeto es una entidad de tiempo de ejecución Es una estructura de datos con tantos campos como atributos tenga definidos la clase 123456 100000 titular codigo saldo ultOper -5000 10000 J. Gomez 87654321 nombre dni 50000 Objeto Persona Objeto Array Semántica referencia para todas las variables

Sintaxis y semántica de los mensajes 1) Unarios obj oper 2) Binarios obj operBin arg 3) Keyword obj part1:arg obj part1:arg1 part2: arg2 obj part1:argn .. partn: argn Donde: obj: Objeto receptor oper, operBin, part1: selector part1: part2: métodos arg, arg1, …: argumento SINTAXIS Ejecutar el método de la clase del receptor con igual nombre al selector, aplicándose las operaciones sobre el objeto que especifica el receptor. SEMÁNTICA

Ejemplos Unarios Binarios 8 factorial 3+4 unaCuenta saldo 0@0 nombre tamaño saldo <=saldoMinimo Cuenta new Keyword unaCuenta reintegro:1000 conjCuentas at:10 conjCuentas at:10 put: cue1 unaCuenta titular: unaPersona codigo: 1234 saldo: 10000 self error:'Cantidad no valida'

Acceso a variables de instancia Acceso a las variables de instancia de la clase mediante métodos de instancia (set y get). c:= Cuenta new c reintegro: 10000 c ingreso: 20000 c verUltOperaciones “acceso al campo ultOper del objeto c”

Asignación Un objeto asociado a una variable cambia cuando se evalúa una expresión de asignación. variable := expresión Ejemplos: c1:= Cuenta new abrirCuenta saldo := saldo - cantidadPtas. s:= c1 saldo rect := Rectangulo corner1: punto1 corner2: punto2. miObjeto:= otroObjeto El operador := no hace una copia del objeto

Bloques Objeto que contiene código ejecutable unBloque:= [Cuenta abrirCuenta] Representa una forma de ejecución diferida. Puede tener argumentos otroBloque:= [:c | c saldo] yOtroBloque:= [:v :c | c reintegro:v. c saldo ] Puede recibir un mensaje que provoca su ejecución unBloque value otroBloque value: Cuenta abrirCuenta yotroBloque value: 1000 value: cuenta1 unomasBloque valueWithArguments: argArray “mas de 3 arg”

Ejemplos Bloques ifFalse: falseBlock ifTrue: trueBlock {clase Boolean} ^falseBlock value whileFalse: aBlock {clase Context} self value ifFalse: [ aBlock value. self whileFalse: aBlock]. ^nil

Estructuras de Control: Condicional expresionBooleana ifTrue: [...] ifFalse [...] expresionBooleana ifTrue: [...] expresionBooleana ifFalse: [...] ifTrue [...] expresionBooleana ifFalse: [...] denotando [...] un bloque sin parámetros Ejemplo: (indice<=limite) ifTrue: [total:= total + (lista at:indice)] ifFalse:[self error: ‘limite excedido’)]

Estructuras de Control: Iteraciones Bloque_expr_bool whileTrue: [...] Bloque_expr_bool whileFalse: [...] unEntero timesRepeat:[...] unEntero to: otroEntero do: [:i| ...] Ejemplos: 1) indice:=1. [indice<=lista size] whileTrue: [ lista at: indice put: 0. indice:= indice + 1] 2) 10 timesRepeat:[self add:unCaracter] 3) 1 to: 10 do:[:i | lista at: i put: 0]

Iteradores (I) Permiten recorrer una colección (array, conjunto, lista, string,...) realizando diversos tratamientos sobre los elementos 1) aplicar una misma operación a todos los elementos 2) seleccionar elementos que cumplen una condición 3) aplicar una misma operación a aquellos elementos que cumplen una condición

Iteradores (II) 1) unaColeccion do: [...] Ejecuta el bloque [...] para cada elemento en unaColeccion 2) unaColeccion select: [...] Crea otra colección con todos los elementos del receptor que cumplen una condición expresada en el bloque [...]. 3) unaColeccion reject: [...] Crea otra colección con todos los elementos del receptor que no cumplen una condición expresada en el bloque [...]. 4) unaColeccion collect: [...] Ejecuta el bloque [...] para cada elemento del receptor y crea otra colección con los valores obtenidos.

2.5. Herencia en Smalltalk Object Mecanismo que nos permite definir una clase en función de otra Organiza las clases en una estructura jerárquica: Jerarquía de clases Herencia Simple Object es la clase raíz Object describe las propiedades comunes a todos los objetos Object A B C D Terminología: C y D son subclases de B B es la superclase de C y D

Herencia. Ejemplo de jerarquía de clases Jerarquía de figuras

Clase Rectangulo Un rectángulo es un caso especial de polígono: muchas de sus características son idénticas (traslación, rotación) Sin embargo un rectángulo tiene características especiales (diagonal) propiedades especiales (número de lados es cuatro, ángulos rectos,..) Versiones especiales de algunas operaciones

Ejemplo Clase Poligono (1/2) Object subclass: #Poligono instanceVariableNames: 'vertices' classVariableNames: '' poolDictionaries: '' traslacionHorizontal: unReal vertical: otroReal vertices inicio. [vertices esUltimo] whileFalse: [ vertices valor traslacionHorizontal: unReal vertical: otroReal. vertices siguiente] rotarConCentro: unPunto angulo: unReal ... Ejemplo Clase Poligono (1/2)

Ejemplo Clase Poligono (2/2) visualizar ... perimetro |actual, anterior, suma| vertices inicio. actual := vertices valor. [vertices esUltimo] whileFalse: [ anterior := actual. vertices siguiente. suma := suma + actual distancia:anterior]. suma := suma + actual distancia:vertices primero. ^suma Ejemplo Clase Poligono (2/2)

Ejemplo Clase Rectangulo “La clase Rectangulo hereda de Poligono: - redefiniendo la rutina perimetro - añadiendo variables de instancia” Poligono subclass: #Rectangulo instanceVariableNames: 'lado1 lado2 diagonal' classVariableNames: '' poolDictionaries: '' perimetro ^ 2 * ( lado1 + lado2 ) …. Ejemplo Clase Rectangulo

Polimorfismo y Ligadura Dinámica Smalltalk es un lenguaje tipado dinámicamente, luego una variable o parámetro puede ligarse en tiempo de ejecución a un objeto de cualquier clase. ¿Tiene sentido hablar de polimorfismo? La ligadura de un mensaje a un método concreto se realiza en tiempo de ejecución ¿Qué versión de perímetro se ejecuta en cada mensaje? f:= Poligono new. f perimetro {i} r:= Rectangulo new. r perimetro {ii} f:=r f perimetro {iii}

¿Qué método se ejecuta cuando se envía un mensaje a un objeto? Ligadura dinámica ¿Qué método se ejecuta cuando se envía un mensaje a un objeto? 1) Se busca en la clase del objeto receptor un método con el mismo identificador que el selector del mensaje. 2) Si lo encuentra lo ejecuta, sino busca en la superclase. 3) Repite el proceso hasta encontrar el método en alguna superclase o llegar a Object. 4) Si llega a Object y no lo encuentra se produce un error en tiempo de ejecución. Object C1 C2 C3 Búsqueda método ob:=C3 new ob met1

Ejemplo código genérico (I) En clase Cuenta: saldoFinAño saldo:= (saldo) + (self intereses) - (self costeTarjeta) En clase Magnitud: between: inf and: sup ^(inf <= self) and: (self <= sup) USO: x between: $a and: $z x between: 1 and: 100 x between: 2@4 and: 12@14

Ejemplo código genérico (II) En clase Collection: addAll: unaColeccion unaColeccion do: [:elem| self add: elem]. ^unaColeccion Invocación: x addAll : (10 20 30) x addAll: 'hola' x addAll: unConjunto x addAll: unaListaOrdenada

Estructuras de datos polimorfas Contiene objetos de diferentes clases Ejemplo: Array con cualquier variante de Figura ConjFig: ARRAY new:10 {Variable global} p: Poligono new. r: Rectangulo new. c: Circulo new. t:Triangulo new; ConjFig at:1 put:p; at:2 put:r; at:3 put:c; at:4 put:t. 1 2 3 4 ConjFig

Estructuras de datos polimórficas y código genérico dibujarFiguras 1 to: ConjFiguras size do: [:i| (ConjFiguras at: i) dibujar] ConjFiguras do: [:figura| figura dibujar]