Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Puntos a tratar
Qu es orientacin a objeto? Los principios de la orientacin a objeto Orientacin a objeto en Omnis Studio Uso de la herencia y las subclases Invocacin de mtodos y mensajes Uso de Sub-ventanas Uso de la clase objeto
Programacin Estructurada
Acercamiento de arriba hacia abajo Los datos y las funciones se guardan por separado Fragmentacin hacia abajo de los componentes del programa hasta el lmite Mejora en la calidad del software Si el diseo es incorrecto despus de haber comenzado a programar, tendremos que reestructurar todo desde el principio
Qu es Orientacin a Objeto?
Aplicacin basada en objetos de software stos simulan objetos del mundo real Es un modo diferente de construir sistemas Supone un cambio radical del paradigma Es una tecnologa Es una nueva metodologa
Un poco historia de la OO
A finales de los aos 60 se inventa un lenguaje llamado Simula, de Ole-Johan-Johan Dahl y Kristen Nygaard del centro de cmputo noruego en Oslo Al principio de los 70, SmallTalk de Alan Kay en Xerox PARC, fomentaron la idea de usar objetos de software simulando objetos del mundo real y usarlos en el desarrollo de nuevas aplicaciones A mediados de los aos 80, aparecen otros lenguajes de programacin OO, como C++ y Eiffel A ltimos de los 90, hacen su aparicin Java para la Web y Omnis Studio
Objetos
Son "cajas negras" que se comunican entre si, para realizar tareas Combinan el estado (datos) y el comportamiento (procedimientos o mtodos) en una sola entidad Esto acelera y mejora el desarrollo de nuevos programas.
Aporta coherencia, facilita su mantenimiento y su reutilizacin
Abstraccin
Es la capacidad de un lenguaje para tomar un concepto y crear una representacin abstrada del mismo dentro de un programa Implica identificar o abstraer las caractersticas comunes de los objetos y procedimientos para despus combinarlos en una sola entidad que pueda representarlos Por ejemplo, un programador utilizara la abstraccin para observar que dos funciones casi realizan la misma tarea y se puede combinar en una sola funcin Cada objeto en el sistema es un "actor" que puede realizar un trabajo, informar, cambiar su estado y "comunicarse" con otros objetos del sistema Por ejemplo, el objeto alumno, es una representacin abstrada de un alumno del mundo real
Clases (Class)
Se puede pensar en una clase como una fbrica que produce un objeto de una clase determinada Un objeto es definido por su clase y determina todo lo que es Proporciona las especificaciones que marcaran el comportamiento y los atributos de los objetos Es una abstraccin de una entidad del mundo real
Caso (Instance)
Los objetos son Casos individuales de una clase Cada objeto posee un identificador nico Por ejemplo, se puede crear un objeto llamado Rintintn de la clase perro Los lenguajes orientados a objeto cuentan con la capacidad, (generalmente llamada factory), para "fabricar" objetos de una clase determinada Es posible crear ms de un objeto de la clase perro, y llamarlos Pluto, Tintn, etc. Los Casos se comunican entre s mediante mensajes
Encapsulado
Podemos pensar en un objeto como algo que posee un interfaz externo y un medio interno que permanece oculto al mundo exterior Este procedimiento de ocultar la informacin es lo que se conoce como encapsulado Los elementos que oculta son:
Datos (variables) y procedimientos o mtodos privados
Los datos as ocultados estn protegidos Los elementos que no se ocultan son:
Procedimientos o mtodos pblicos
Todo el contenido pueden ser modificado sin que afecte al mundo exterior
Mensajera
Los casos se comunican entre si mediante mensajes Los mensajes vlidos son definidos en la clase Cuando un caso recibe mensajes que puede entender, realiza una operacin Por ejemplo, la clase perro define lo que este va a ser, de modo que los objetos de perro entiendan, y puedan actuar ante mensajes como "hueso", "trae", "gira", etc. Un mensaje se compone de:
Nombre de la operacin (nombre del mtodo) y de cualquier informacin adicional que requiera la operacin (parmetros)
Lo ltimo la direccin
Los lenguajes tradicionales utilizan direccionamiento esttico para unir una referencia a una variable o a un procedimiento, determinados durante la fase de diseo Con el direccionamiento dinmico se deja la decisin ltima en cuanto a que variable o mtodo utilizar al tiempo de la ejecucin A menudo resulta imposible determinar durante la fase de diseo, exactamente qu variable o mtodo ser necesario
Polimorfismo
Cada clase de objeto que responde a un mensaje tiene su propio mtodo con un nombre que puede no ser nico Cuando el mtodo es invocado cada objeto responde con el suyo propio El objeto invocado no necesita saber de qu clase es para recibir el mensaje
Herencias
Es la capacidad de definir una clase como perteneciente a otra Es jerrquica Una subclase hereda caractersticas de la clase superior A menudo el tipo de clase determina el tipo de su adyacente ya sea subclase o clase superior La relacin entre la subclase y la clase superior se referencia como: "es una clase de" Por ejemplo, un tigre es una clase de gato Las jerarquas pueden ser expresadas de diferentes modos
Qu se hereda?
Atributos visuales Ciertas variables Interfaz externo
Mtodos pblicos
Herencia simple
En una herencia simple, la subclase nio puede heredar solamente una clase superior padre Cualquier clase superior puede tener mltiples subclases Es un mecanismo claro y sencillo
Herencia mltiple
Ocurre cuando una clase hereda ms de una clase superior "padre" Qu dificultades se plantean? A. Se producen paradojas con la herencia, las propiedades y mtodos, e.g.
2 clases B y C heredan de la clase A y hay otra clase D que est heredando A, B y C Ahora, si la clase A tiene un mtodo "fred()" tambin B y C, pero ambas heredan la clase D que a su vez hereda de A, B y C Qu mtodo "fred()" se ejecutar? Si D es llamado, que "fred" se ejecutar, es decir el de a, el de b o el de c?
Asociar y Empacar
Una alternativa al problema de la herencia jerrquica es la de empacar componentes No se produce la herencia (un motor no es una clase especial de coche) Los objetos asociados son empacados y ahora todos ellos "trabajan" como una unidad Los paquetes son como las cestas de la compra que pueden contener muchas y diversas clases de objetos Los objetos en un paquete se juntan libremente, pero cada objeto resulta til por si solo
Clases de datos
Schema, query, table*, file, search
* OO Clase que requieren ser instaladas Schema y query son creadas a partir de clases table
No se puede usar el comando Do para llamar a mtodos pblicos, si estn en la misma clase Los mtodos pblicos se deben invocar usando mensajes
Se hace referencia a una clase por su nombre El 1er parmetro es el nombre del caso, un * asignar uno por defecto El mtodo $construct ser invocado en el momento que el caso ocurre o se dispone
Grupos de Objetos
Existen comandos para referirse al conjunto de objetos de una clase en uso (hecha disponible) Se identifica un slo miembro para cada grupo Casos de Ventanas en uso o abiertas - $iwindows Objetos de Mtodos o tareas - $itasks Name, es lo mismo que Library Name Mens instalados - $imenus Slo mens instalados o situados en la barra de mens Barras de herramientas instaladas - $itoolbars Slo herramientas instaladas o la barra de herramientas de Omnis Las ventanas en uso tambin pueden contener estos grupos de objetos instalados en su interior $iwindows.myWind.$menus.myMenu $iwindows.myWind.$toolbars.myToolbar
Removiendo un caso
Usando un comando 4GL
Close window instance myWind
Se hace referencia a los casos por nombre El mtodo $destruct es automticamente invocado cuando el caso desaparece excepto si se trata de Tablas y Objetos
Enviando mensajes
El comando "Do" permite el envo de mensajes a objetos Slo se puede enviar un mensaje a un caso Debe incluirse una referencia que identifique al objeto e.g.
Do $iwindows.myWind.$fred(p1,p2,p3)
Es como la direccin en un correo postal Los parmetros se indican entre parntesis $iwindows.myWind constituye la referencia
No es posible enviar un mensaje a un men contextual, puesto que no es referenciable por este medio
Esta referencia afectar a todos los objetos del grupo $ref ir alternando la referencia que identifique a cada objeto
Este mtodo permite un segundo parmetro booleano opcional, con el que podr ser ms selectivo
Do $iwindows.$sendall($ref.$close(),$ref.$class() .$name=myClass
Este mensaje ser enviado nicamente a los objetos que cumplan la condicin expresada en el segundo parmetro (kTrue)
Adquiriendo propiedades
Puede otorgar (override) o adquirir (overload) propiedades heredadas en la ventana Property Manager Las propiedades heredadas aparecen en azul Seleccione un objeto en la ventana de edicin Pulse botn-derecho sobre la propiedad requerida y luego Overload Property Ahora puede alterar su valor como habitualmente lo hace
Propiedades heredadas
Cuando una propiedad ha sido previamente adquirida, (overloaded) podr ser heredada de una clase superior usando la ventana Property Manager Las propiedades que se muestran en negro, no pueden ser heredadas Seleccione un objeto en la ventana de edicin Pulse botn-derecho sobre la propiedad y seleccione Inherit Property El valor heredado se mostrar en azul a la derecha
Mtodos heredados
Slo mtodos pblicos (prefijo $) pueden ser heredados Los mtodos heredados se muestran siempre en azul Un mtodo se ejecuta al ser invocado por un mensaje
Sub-rutinas
En ocasiones se necesita invocar a un mtodo de una subclase durante la ejecucin de otro en una clase superior Cree un mtodo pblico simulado que no contenga ningn cdigo, defnalo en la clase superior e invquelo desde otra clase superior Se requiere haber otorgado (Override) el mtodo en la subclase
Otorgando mtodos
Se puede otorgar (override) un mtodo heredado en una subclase Pulse botn-derecho sobre el mtodo elegido en la ventana Method Editor y seleccione Override Method Introduzca el nuevo cdigo como lo hace habitualmente El mtodo es ejecutado al recibir un mensaje
Si se necesita otorgar parmetros para enviarlos a una clase superior puede usar el siguiente mtodo:
Do $inherited.$myMethod(p7,p8,p9)
Herencia de mtodos
Un mtodo otorgado en una subclase puede ser heredado Pulse botn-derecho sobre el mtodo en la ventana Method Editor y seleccione Inherit Method Observe que al hacer esto desaparece el mtodo de la subclase y se pierden todas las lneas de cdigo
Referencias dinmicas
Calculate $cinst.iCust as 'Jill' Calculate myVar as $cinst.iCust
La referencia a iCust se crea en el momento de la ejecucin
La diferencia es que en el segundo caso, la variable iCust, puede no existir lo que no supondr un error sintctico, en ese caso la variable myVar tendra un valor Null
Otorgando variables
Las variables heredadas se muestran en azul Pulse botn-derecho sobre la variable en la ventana Method Editor y seleccione Override Variable Slo puede hacerse con variables de clase y de caso (Instance) Evite copiar y pegar campos y lneas de cdigo, pueden otorgar automticamente variables
- Para evitar esto puede pegar la lnea sobre una comentada y luego descomentarla
No es posible acceder a una variable de subclase desde una clase superior pero puede pasar valores a la misma mediante el uso de parmetros
Herencia de variables
Una variable otorgada en una subclase puede ser heredada Pulse botn-derecho sobre la variable en la ventana Method Editor y seleccione Inherit Variable La variable es eliminada de la subclase y todas las referencias a la misma se vern afectadas (se cambiaran por #???)
Orden de la herencia
Los campos heredados aparecen en primer lugar (en orden de tabulacin) El orden puede ser cambiado usando la propiedad $inheritedorder Se requiere cambiar el orden para cada nivel heredado
Sub-ventanas
Una sub-ventana es una agregacin Es una clase "ventana" y puede contener los objetos habituales como campos, fondo, etc. Puede contener muchos campos o slo alguno Una sub-ventana puede ser utilizada en un nmero indeterminado de clases "ventana" Es un mecanismo alternativo al uso de la herencia Es la versin Omnis Studio de ActiveX
Combinando sub-ventanas
Las sub-ventanas se pueden combinar con otros campos sobre la misma ventana Otros objetos se comunican con la subventana va interfaz pblico La sub-ventana puede comunicarse con otros objetos va "callback"
Clases Tabla
Dispuestas como variables de la fila (row) o de la lista (list) - Los casos tabla (table), fila (row) o lista (list) son equivalentes El caso es creado cuando se define la "row" o la lista (list) Do myRow.$definefromsqlclass(myTab,,p1,p2 - Definido desde una clase "table", no de "schema" o "query" - Se pueden pasar parmetros al mtodo $construct, note ',,' Incorpora una interface de datos va "row" o "list" Los mtodos proporcionan una abstraccin SQL Permite separar la lgica de los datos del entorno de usuario Mtodos pblicos aplicados a tablas, disponibles va "list" o "row" Do myRow.$select(con(where myCol = ,myRow.myCol,)) El mtodo de tabla $cinst referencia a un caso y a una variable "row" o "list" El caso desaparece cuando la variable se - El mtodo $destruct no se ejecuta de modo automtico
Clases objeto
Posee caractersticas similares a los casos de clase Tabla, pero sin interface de datos (variables "list" o "row") Disponibles como variables de tipo objeto Pueden ser definidos como estticos o como dinmicos El caso desaparece cuando la variable es limpiada
- El mtodo $destruct no se ejecuta de modo automtico
Casos objeto
Definicin esttica
- Defina una variable - Desgnela como tipo objeto y ponga como sub-tipo una clase objeto - El mtodo $construct se ejecutar la primera vez que el objeto sea invocado
Definicin dinmica
- Defina una variable - Desgnela como tipo objeto y deje el sub-tipo en blanco Do $clib.$objects.myObj.$new() Returns myVar - El mtodo $new ejerce la misma funcin que el $open - El mtodo $construct es ejecutado, cuando se crea el caso mediante $new
Sumario
Aplicacin basada en objetos de software Es un modo diferente de construir sistemas Es un cambio radical del paradigma Es una tecnologa Ms importante, es una metodologa Beneficios: - Re-utilizacin - Consistencia - Mantenimiento - RAD (una clase superior en el desarrollo de sistemas)