Tutorial ABAP Objects: Parte 1 inShare12 inShare 12
Conozca el universo de la programación orientada a objetos en SAP implementada con ABAP Objects. n este !tip"# el primero de la serie de Tutoriales Tu toriales de ABAP Objects# veremos conceptualmente co nceptualmente cómo se implementa el paradigma de objetos en el mundo SAP. n los pró$imos art%culos se tratar&n en detalle ejemplos de programación paso a paso# ' otras caracter%sticas del entorno. La programación orientada a objetos (POO) es una filosofía de diseño desarrollo de soft!are donde el modelo inform"tico es un re(lejo de las entidades del mundo real # $ diferencia de los lenguajes tradicionales% donde e&isten procedimientos por un lado datos por el otro% la POO permite a los programadores representar cada entidad del problema como un objeto 'encapsulado ue contiene tanto sus datos cómo los 'comportamientos gestionan sobre ellos# *ali+ndose de un lenguaje entorno ue respete los principios de la teoría de objetos% los objetos se crean a partir de una definición abstracta de los mismos% denominada !clase"% ue describe sus características comportamientos# comportamientos# Los objetos concretos concretos luego ser"n 'ejemplares o !instancias"de esa ,plantilla, abstracta ue es la clase# Por ejemplo% clases objetos típicos del entorno de negocios son ,-lientes,% ,.ateriales,% ,Ordenes de compra,% etc# La teoría de objetos se estructura alrededor en un conjunto de propiedades paradigmas conceptuales (ue e&ceden el alcance de este artículo)% implementados luego en los distintos entornos de programación# /&isten% numerosas probadas 0 entajas asociadas a la programación orientada objetos ue incluen el encapsulamiento de la complejidad% la reusabilidad del código% la modularidad% entre otros# La programación orientada a objetos representó una 0 erdadera re0olución en el uni0erso del desarrollo de soft!are% impulsando a programadores% analistas aruitectos de sistemas a re aprender su forma de concebir código aplicaciones# /n una primera instancia% lenguajes como -% luego 3$*$% 3$*$% se con0irtieron en los entornos de programación OO m"s emblem"ticos#
n el mundo SAP# el instrumento )ue disponemos en ABAP para trabajar de acuerdo a este paradigma son los lo s *ABAP Objects*. La introducción de $4$P Objects en el 5elease 6#7 representó un a0ance fundamental para incorporar t+cnicas de programación contempor"neas en un lenguaje tradicionalmente procedural# Sin embargo% la plena materiali8ación del paradigma de objetos en el mundo S$P% llegó reci+n a partir de la 0ersión 7#19% con el ad0enimiento del :eb $pplication Ser0er como sucesor de S$P 4asis# /l concepto de $4$P Objects representa dos cosas distintas en el mundo S$P# Por un lado% designa a la concepción de toda la plataforma de ejecución como un nue0o paradigma de trabajo# Por otro lado% designa a la nue0a e&tensión del lenguaje $4$P# $4$P# /l propósito de este 'tip% el primero de la s erie de ;utoriales de $4$P Objects% es entender conceptualmente cómo se re(leja el paradigma de objetos en el mundo SAP.
+os paradigmas de Orientación a Objetos en ABAP Objects -omo se dijo anteriormente% el lenguaje $4$P el entorno de programación S$P% logra a partir de una nue0a 0ersión con e&tensión orientada a objetos% el diseño de nue0as aplicaci ones% basadas en la teoría de objetos#
-omparado con otros% $4$P no es un lenguaje 'puro orientado a objetos# /l runtime de $4$P soporta tanto el modelo de programación procedural como el de $4$P Objects en cualuier programa ejecutable% módulos o funciones# /sto permite la utili8ación de nue0as t+cnicas basadas en $4$Psin necesidad de reescribir todo el código#
Propiedades de un paradigma orientado a objetos: Son precisamente las propiedades del paradigma de objetos lo ue le otorga su singularidad todas las 0entajas de modularidad cuando se plasman en la programación#
ncapsulamiento: /s el t+rmino ue define formalmente la fusión dentro del mismo objeto de sus datos m +todos (comportamiento)# Los objetos son tratados como 'caja negra% de manera ue sólo sus m+todos pueden actuar sobre sus datos% brindando independencia en la implementación de los mismos##
Abstracción: Permite a un objeto comunicarse desconocer el forma en ue se lle0a a cabo el mensaje#
Polimor(ismo: -apacidad ue tienen objetos de distintas clases de responder a un mismo m+todo obtener diferentes reacciones#
,erencia: Se produce cuando una clase (la subclase) comparte la estructura (atributos) el comportamiento (m+todos) definidos en una o m"s clases (superclases)# (
Objects# /s interesante contrastar las capacidades de $4$P Objects con las de otros lenguajes OO populares% en t+rminos de cómo se ciñe al modelo POO#
Cuadro de di(erencia entre los lenguajes de programación orientado a objetos: Caracter%sticas
ABAP
-AA
C//
Se permite 0erencia mltiple
Si
s un lenguaje puro orientado a objetos
S>
+iberación de objetos de (orma autom&tica
S>
S>
$iste el concepto !inter(az"
S>
S>
,eredan de la clase OB-CT
S>
S>
2anejo de par&metros opciones de (orma e$plicita
Si
+os programas se ejecutan sobre3
$pplication Ser0er $4$P
Procesador 0irtual 3.* (3a0a *irtual .achine)
Sobre el sistema operati0o
?escribiremos a continuación las principales sentencias ue se utili8an en $4$P para trabajar con objetos#
A 4 Clases en ABAP Objects /n la programación orientada a objetos% la @nica unidad de estructuramiento son las clases# /n lugar de trabajar sobre datos procedimientos% como en un lenguaje con0encional% trabajamos con objetos ue encapsulan autocontienen sus datos la forma de gestionar sobre los mismos#
Las clases son una definición abstracta de objetos# /sto significa ue la definición o declaración de un objeto es la clase# Luego% los objetos propiamente dichos ser"n ,ejemplares, de una clase cualuiera# /sta acción de crear un objeto a partir de una clase se llama instanciar % por eso se conocen a los objetos como instancias de una clase# Las propiedades o atributos de una clase en una clase conforman las características de los objetos# /stos atributos est"n definidos por las componentes de la clase ue describe el estado (los datos)#
Tipos de clases: 5lobales s. +ocales Las clases en $4$P Objects pueden ser declaradas globalmente o localmente# $sí como e&iste una manera de definir un Aunction Broup o un Aunction .odule desde el $4$P :orCbench para ser usados en la programación $4$P tradicional% tambi+n es posible definir las clases globales las interfaces en el $4$P :orCbench mediante el -lass 4uilder (;ransaction S/26)# /stas clases son almacenadas centralmente en pools de clases en la biblioteca de cl ases dentro del repositorio de S$P# ;odos los programas $4$P en un sistema S$P pueden acceder a las cl ases globales# Las clases locales son las ue se definen dentro de un programa $4$P# ?e esta manera% las interfaces las clases locales pueden ser usadas solamente en el programa en donde est"n definidas# -uando se usa una cl ase en un programa $4$P% el sistema primero busca una clase local con el nombre especificado# Si no se encuentra ninguna% busca una clase global#
6e(inición de una clase local La definición completa de una clase en $4$P Objects consiste en una sección de declaración% otra de implementación% ambas iniciadas con la sentencia -L$SS#
Sentencia para la declaración de una clase local:
C+ASS 7class8 69;TO;. 3 ;6C+ASS.
Sentencia para la implementación de una clase local:
C+ASS 7class8 2P+2;TATO;. 3 ;6C+ASS.
B < Componentes de una clase
Los componentes de una clase conforman su contenido% se declaran en la parte declarati0a del código# ?efinen las propiedades de los objetos de esa clase# -uando la clase se define% cada componentes se asocia a una de las tres posibles secciones de visibilidad: p@blico% protegido o pri0ado# Las secciones de 0isibilidad definen la inter(az e$terna de la clase#(0er apartado sobre 0isibilidad m"s abajo) ;odos los componentes son 0isibles dentro de la clase% comparten el mismo espacio de nomenclatura% por lo ue cada componente debe tener un nombre uní0oco dentro de su clase# Se implementan en $4$P dos tipos de componentes en una clase% auellos ue e&istir"n en cada uno de los objetos o instancias de clase% aduiriendo 0alor separadamente uno para cada objeto# auellos ue e&isten sólo una vez para la clase entera# independientemente de la cantidad de instancias# denominados componentes STATCOS# $ los primeros% en cambio% se los llama componentes espec%(icos de instancia # Las componentes de una clase son los atributos# los m=todos# los eventos# los tipos ' las
constantes.
B<1 Atributos /n $4$P los atributos son los campos internos de 6ATOS definidos para la clase# Pueden declararse a partir de cualuier tipo de dato 0"lido en $4$P# /n cada instancia de clase los atributos reflejar"n el estado del objeto (es decir% los datos del objeto)# 5espetando la clasificación general enunciada para los componentes de clase% tendremos dos tipos de atributos= los específicos de instancia% los est"ticos#
Atributos dependientes de instancia. /l contenido de estos atributos define el estado propio e indi0idual de cada objeto en cada instancia de clase# S e declaran usando la sentencia ?$;$# +os atributos STATCOS. ?efinen el estado de la clase 0"lido para todas las instancias de la mismo# /&isten% por lo tanto% sólo una vez para la clase% son accesibles durante todo el runtime de la clase# ;odos los objetos pueden acc eder a sus atributos est"ticos de su clase% si se cambia un atributo est"tico en un objeto% el cambio es 0isible en todos los dem"s objetos de la clase#
B4 > 2=todos Las funcionalidades asociadas a los objetos se definen a tra0+s de l os m+todos% ue de esa forma determinan el comportamiento de los objetos# Los m+todos son procedimientos ue definen el comportamiento de un objeto% su funcionalidad asociada# Se utili8an para acceder a los atributos pri0ados de una clase% como tambi+n modificarlos mediante una interfa8 con par"metros ue les permite recibir 0alores de0ol0er 0alores despu+s de la llamada# /n $4$P% un m+todo se define en la parte declarati0a de la clase luego se implementa en la parte de implementación#
est"ticos#
6eclaración de m=todos Métodos dependientes de instancia
2T,O6S 7met08 2PO?T;5.. @A+7ii8@D TEP t'pe @OPTO;A+.. FPO?T;5.. @A+7ei8@D TEP t'pe @OPTO;A+.. C,A;5;5.. @A+7ci8@D TEP t'pe @OPTO;A+.. ?T?;;5 A+7r8D FCPTO;S.. 7ei8..
Para declarar métodos estáticos se usa se usa la siguiente sentencia:
C+ASS<2T,O6S 7met08## 2PO?T;5.. @A+7ii8@D TEP t'pe @OPTO;A+.. FPO?T;5.. @A+7ei8@D TEP t'pe @OPTO;A+.. C,A;5;5.. @A+7ci8@D TEP t'pe @OPTO;A+.. ?T?;;5 A+7r8D FCPTO;S.. 7ei8..
mplementación de m=todos -uando se implementa un m+todo no es necesario especificar los tipos de datos de los par"metros% debido a ue se encuentran a se encuentran definidos en la declaración# /n un m+todo se pueden declarar tanto las 0ariables locales% como tambi+n usar las sentencias ?AS 7e$ception8 2SSA5 ?AS;5 para controlar los errores#
2T,O6 7met08 2PO?T;5..@A+7ii8@D FPO?T;5..@A+7ei8@D C,A;5;5.. @A+7ci8@D ?T?;;5 A+7r8D FCPTO;S.. 7ei8..
3 ;62T,O6.
+lamadas al m=todo Las llamadas al m+todo depender"n de dónde se lo in0oue= /n la parte de implementación de una clase se pueden llamar directamente m+todos de la misma clase simplemente usando su nombre#
CA++ 2T,O6 7met08.
?esde fuera de la clase% sólo se llama a los m+todos cua 0isibilidad nos permite hacerlo#
CA++ 2T,O6 7cre(8<87met08. A partir de G.1H se puede llamarlo as%: 7cre(8<87met08 directamente# sin la palabra clave CA++ 2T,O6 donde EcrefF es una 0ariable de referencia cuo 0alor apunta a una instancia de la clase#
Los m+todos 0isibles est"ticos tambi+n pueden ser llamados
CA++ 2T,O6 7class8I87met08. A partir de G.1H se puede llamarlo as%: 7class8I87met08 donde EclassF es el nombre de la clase#
/n un m+todo los pasajes de par"metros de entrada son opcionalesG dentro del m+todo se declaran con el tipo >.PO5;>
.PO5;>
B
es decir% cuando se crea una instancia% mediante la sentencia -5/$;/ O43/-;)% para (ijar el estado inicial de un nuevo objeto o clase (constructor est"tico)# Los constructores% tanto si est"n parametri8ados como si no lo est"n% para ser implementados deben estar declarados e&plícitamente% en su declaración se puede contemplar el manejo de errores#
6eclaración de constructor: /l constructor dependiente de instancia
2T,O6S CO;ST?CTO? 2PO?T;5..@A+7ii8@D TEP t'pe @OPTO;A+. FCPTO;S..7ei8. /l constructor est"tico% no contiene par"metros es llamado una 0e8 por cada clase
C+ASS<2T,O6S C+ASSKCO;ST?CTO?.
mplementacion de un constructor: ?ependiente de la instancia
2T,O6 CO;ST?CTO?. 3 ;62T,O6. >ndependiente ó est"tico#
2T,O6 C+ASSKCO;ST?CTO?.
B
+anzamiento de un evento ?AS ;T 7evt8 #
Declaración de un método manejador de eventos para la misma o diferente clase
9O? ;T 7evt8 O9 7class8 #
Vinculo entre el disparador y el manejador (trigger y handler:
ST ,A;6+?.
Clasi(icación de eventos /0entos dependientes de instancia= Son declarados con la sentencia ;TS 7evt8 solo pueden ser desencadenados en un m+todo dependiente de instancia#
/0entos est"ticos o independientes de instancia= Se declaran con la sentencia C+ASS<
;TS solo pueden desencadenarse por un m+todo est"tico de la clase#
B
Las constantes permiten ue dar a un objeto de dato interno un 0alor fijo durante su declaración +ste no puede ser modificado# La sentencia usada es CO;STA;TS#
B
C+ASS 7class8 69;TO;. PB+C SCTO;. 3 P?OTCT6 SCTO;.
3 P?AT SCTO;. 3 ;6C+ASS.
Tipos de visibilidad: Public section: Permite ue los componentes pueden ser accedidos por todos los usuarios de la clase% m+todos de la clase adem"s por cualuier cl ase ue herede de ella# Protected section: Los componentes solo logran ser accedidos por los m+todos de la clase de las clases ue heredan de ella Private section: Los componentes sólo ser"n accedidos por m+todos de la misma clase#
;odos los componentes son 0isibles dentro de la clase% comparten el mismo espacio de nomenclatura% por lo ue cada componente debe tener un nombre uní0oco dentro de su clase#
C< Objetos Los objetos son entidades tangibles de una clase ue residen dentro de un conte&to de una sesión interna ("rea de memoria de un programa $4$P)#
Caracter%sticas de un objeto: /l estado% los 0alores concretos (datos) asignados a los atributos# /l comportamiento% se define por los procedimientos ue puede reali8ar un objeto# La identidad es una propiedad de un objeto ue lo diferencia del resto% como es el nombre#
Creación de un objeto La sentencia -5/$;/ O43/-; EcrefF crea una instancia de una clase# La 0ariable referenciada EcrefF contiene la referencia al obj eto#
!cceder a los componentes de un objeto Para acceder a un componente de un objeto depender" del tipo de componente desde dónde se uiere in0ocar# Se detallas las K maneras distintas de lograrlo#
Los programas $4$P sólo pueden acceder a los c omponentes de las instancias de un objeto usando las 0ariables referenciadas EcrefF#
Para acceder al atributo attr= classFattr . Para llamar al m+todo meth= CA++ 2T,O6 cref <8met0.
Para los componentes est"ticos (dependientes de clase) se puede usar tanto el nombre de la clase como la 0ariable referenciada#
Para acceder al atributo est"tico attr= classI8attr. Para llamar al m+todo est"tico meth= CA++ 2T,O6 classI8met0.
?entro de una clase se puede acceder tambi+n a los componentes indi0iduales mediante la referencia a sí mismo ./=
Para acceder al atributo attr en la propia clase= me<8attr. tambi=n se acepta
sólo attrD Para llamar al m+todo meth en la propia clase= CA++ 2T,O6 me<8met0.
Tiempo de vida de un objeto In objeto solo puede seguir e&istiendo siempre cuando haa una referencia a un objeto ó cuando un objeto maneja el e0ento de otro objeto (handler)# ?e lo contrario el objeto es borrado de la memoria autom"ticamente#
?e(erencias Las 0ariables de referencia permiten acceder a los objetos# /n 0e8 de crear 0ariables de referencia con referencia a una clase% se las puede definir con referencia a una interfa8# /ste tipo de 0ariables @nicamente puede contener referencias a objetos de clases ue implementan la interfa8 correspondiente# Se la define mediante la adición TEP ?9 TO 7int(8. Si se desea crear una nue0a instancia de la clase ue implementa esta interfa8% se lo debe hacer mediante la sentencia=
C?AT OB-CT 7ire(8 TEP 7aclass8 % donde EirefF es una 0ariable de referencia a interfa8
EaclassF la clase ue implementa a EintfF Si la instancia a e&iste se puede hacer la siguiente asignación entre la 0ariable de referencia a clase la 0ariable de referencia a interfa8=
7ire(8 I 7cre(8 # -uando se uiere acceder a un componente definido en la interfa8 EintfF mediante la 0ariable de referencia a clase EcrefF se lo debe hacer mediante la siguiente forma=
7cre(8<87int(Ncompi8 Pero cuando se accede mediante EirefF se lo hace a tra0+s de la forma=
7ire(8<87compi8.
6e(inición de una re(erencia a un objeto: 3 TEP ?9 TO 7class8.
6< ,erencia de clases La herencia se reali8a entre dos clases (una superclase una subclase)# La subclase heredar" los componentes pblicos privados de la superclase% logrando el mismo comportamiento# ;eniendo la posibilidad de e&tender o limitar ese comportamiento para pro0eer una acción reuerida# -abe aclarar ue aunue hereda los componentes pri0ados% +stos
/l nodo raí8 de todos los "rboles de herencia en $4$P Objects es la clase prede(inida
vac%aOB-CT. ?efinición para una herencia: -L$SS EsubclassF ?/A><>;>O< >;>
?ebido a ue los constructores no se heredan% ha e&isten dos maneras de implementarlo ue depender" de si e&iste dependencia ó no a una instancia#
Constructores dependientes de instancia In constructor dependiente de instancia de una subclase solo se ejecutara si todos los constructores dependientes de la superclase son llamados# "lamado al constructor de la superclase. -$LL ./;DO? SIP/5F-O
Constructores est&ticos Se ejecuta de la misma manera ue los constructores dependientes de la instancia solo 0aria en la declaración de la implementación# "lamado al constructor de la superclase.
C+ASSKCO;ST?CTO?#
Clases ' m=todos abstractos ' (inales Las sentencias 2T,O6S C+ASS mediante las adiciones ABST?ACT 9;A+ permiten definir tanto a los m+todos como a las clases de forma abstracta o final# Diferencias: In m+todo abstracto solo se puede definirse en una clase abstracta puede ser implementado en sus respecti0as subclases# Las clases abstractas no pueden ser instanciadas# Son utili8adas para la declaración de m+todos no abstracto% pero al menos debe contener un m+todo abstracto#
In m+todo final es la manera de proteger m+todos para no ser redefinidos por las
subclases# Las clases finales no pueden tener subclases% debido a ue son las ue finali8an el "rbol de herencia# ?e forma implícita todos sus m+todos son 'final#
< nter(az /l objeti0o de una interfa8 es establecer relaciones entre clases sin usar 0erencia# 'a )ue a
veces no 0a' una super
Definición de interfaz ;T?9AC 7int(8. 3 ;6;T?9AC.
Implementación de la interfaz (la implementación debe estar dentro de una clase que usa esta interfaz) 2T,O6 7int(Nimet08. 3 ;62T,O6.
Referencias a interfaces Las 0ariables de referencia permiten acceder a los objetos# /n 0e8 de crear 0ariables de referencia con referencia a una clase% se las puede definir con referencia a una interfa8# /ste tipo de 0ariables @nicamente puede contener referencias a objetos de clases ue implementan la interfa8 correspondiente# Se la define mediante l a adición ;MP/ 5/A ;O EintfF# Si se desea crear una nue0a instancia de la clase ue implementa esta interfa8% se lo debe hacer mediante la sentencia= -5/$;/ O43/-; EirefF ;MP/ EaclassF% donde EirefF es una 0ariable de referencia a interfa8 EaclassF la clase ue implementa a EintfF S la instancia a e&iste se puede hacer la siguiente asignación entre la 0ariable de referencia a clase la 0ariable de referencia a interfa8= EirefF N EcrefF# -uando se uiere acceder a un componente definido en la interfa8 EintfF mediante la 0ariable de referencia a clase EcrefF se lo debe hacer mediante la siguiente forma=
EcrefFFEintfcompiF Pero cuando se accede mediante EirefF se lo hace a tra0+s de la forma= EirefFFEcompiF#
9< $ception /s una situación ue ocurre durante la ejecución de un programa ue interrumpe o cambia su normal comportamiento# La idea fundamental es ue tales situaciones puedan ser manejadas de alguna forma# Las e&cepciones son representadas por una instancia de una clase 'e&cepción# Los atributos de tal objeto 0an a contener información acerca de la situación ocurrida# Ina e&cepción puede ser 'le0antada con la sentencia ?AS FCPTO;. -uando esto ocurre% el sistema busca un manejador adecuado ue se haga cargo en el caso de no encontrarlo% se produce un error en tiempo de ejecución# /ste manejo se puede lle0ar @nicamente a cabo si la sentencia ue podría ocasionar ue se le0ante la e&cepción% se encuentra encerrada por el bloue T?E<;6T?E./specíficamente% el manejo de la e&cepción se reali8a con la sentencia CATC, ue se encuentra dentro del bloue#
T?E. S;T;CAKF. CATC, c$Ke$cK1 ;TO re(Ke$cK1. 3 CATC, c$Ke$cK> ;TO re(Ke$cK>. 3 C+A;P. 3 ;6T?E. 'S/<;/<->$H puede ser una subrutina% un modulo de función% el m+todo de un objeto o algo ue pueda lan8ar una o m"s e&cepciones# -ada 'c&e&ci es una clase e&cepción ue puede ser lan8ada dentro de 'S/<;/<->$H# 'refe&ci es una instancia de la clase 'c&e&ci o de alguna# Lo ue se encuentra dentro del bloue -L/$$H le0anta la e&cepción c&e&cK no e&iste un -$;-D para la misma% se ejecutar" las instrucciones ue se encuentren en el bloue -L/$
Tutorial ABAP Objects: Parte >
inShareQ
n esta Parte > del tutorial de ABAP Objects aprenderemos a crear clases# ' a de(inir sus m=todos ' atributos utilizando la transacción SHS>L. 2ediante un ejemplo sencillo aprenderemos paso a paso cómo de(inir todas las componentes necesarias# ' *testearlas* luego desde un programa. /n este artículo se mostrar" mediante la creación de un programa ejemplo paso a paso% la implementación de clases% m+todos otras componentes del uni0erso de ABAP Objects. 6ado
)ue este tip es el segundo de una serie# si an so se conocen las generalidades del modelo de objetos ' su re(lejo en ABAP# es necesaria la lectura previa del tip Tutorial ABAP Objects: Parte 1. /s importante conocer cómo se materializa en ABAP Objectsconceptualmente el paradigma de objetos para comprender el desarrollo del ejemplo#
2odelo del jemplo -omo se e&plicó en la primera parte del tutorial% en la programación orientada a objetos% la @nica unidad de estructuramiento son las clases# /n lugar de trabajar sobre datos procedimientos% como en un lenguaje con0encional% trabajamos con objetos ue encapsulan autocontienen sus datos la forma de gestionar sobre los mismos# +as clases son una de(inición abstracta de objetos. /sto significa ue la definición o declaración de un objeto es la clase# Luego% los objetos propiamente dichos ser"n ,ejemplares, o ,instancias, de una clase cualuiera# *imos las propiedades del paradigma de objetos% especialmente la herencia ue se produce cuando una clase comparte la estructura el comportamiento definidos en una o m"s clases (superclases)# (
no 0a' una super
,erencia producida entre las clases QKA;2A+ a QK?TB?A6O QK;?TB?A6O. Polimor(ismo al implementar el m=todo CO2? definido en la interfa8 QACCO;. ncapsulamiento debido a ue sólo se logra acceder a datos privados mediante un m+todo como OBT;?KTPOKA;2A+. /l diagrama de clases siguiente detalla los componentes (atributos m+todos) de las clases einter(az ue ser"n utili8ados para este ejemplo=
Creación ' de(inición de la nter(az QACCO; La inter(az es creada para la definición de los m+todos ue se implementar"n en las clases correspondientes#
Pasos de creación de la inter(az ?esde la ;& SH: Seleccionar la opción C+ASS;T?9AC% colocar el nombre del objeto a crear presionar /nter# Luego en el popup !Object
Paso para la de(inición de los m=todos de la inter(az Ina 0e8 creada la interface% se puede obser0ar sobre el panel de la derecha las diferentes solapas ue se utili8an para de(inir los atributos# m=todos# eventos# etc# Se cambia el modo de 0isuali8ación a -D$
Creación# de(inición e implementación de la superclaseQKA;2A+ La creación de la superclase R$<>.$L ser" necesaria para re(lejar los conceptos de ,erencia 'Polimor(ismo# Se 0an a definir atributos crear e implementar m+todos ue
heredar"n las subclases#
Pasos para la creación de la superclase Se repite el primer paso de la creación de la interface se crea un objeto con el nombre QKA;2A+./n la 0entana RObject t'pe se elige la opción Class luego Aceptar # /n la siguiente 0entana se desmarca la opción A><$L% se completa con una descripción% l uego $ceptar finalmente asignar un pauete una O;#
Pasos para la de(inición atributos ' m=todos de la superclase Luego de crear la superclase= 1) Sse cambia el modo de 0isuali8ación a C,A;5# /n este paso se definen los atributos de la superclase# para ello ir a la solapa Attributes% completar los campos re)ueridos (se señalan en la imagen inferior ampliada) 5uardar #
2) /n la solapa 2et0ods se definen los m=todos de instancia ue deber"n ser implementados en la superclase# /l Constructor es un m+todo particular ue se crea al presionar el botón
Pasos para la implementación de los m=todos de la superclase QKA;2A+ 1) Para definir los par"metros de entrada Jo salida de un m+todo% se selecciona el m+todoCO;ST?CTO? se presiona el botón !Parameters"# /l m+todo -onstructor reuerir" los par"metros de entrada KPSO% KCO+O?% KTPOKA;2A+ e KSBTPO.
Par&metros del m=todo CO;ST?CTO?
;ota:
% donde se presenta nue0amente la pantalla de definición de
2) Para implementar un m=todo% seleccionarlo hacer 6oble Clic sobre el mismo# /l propósito del m+todo -onstructor% en este caso parametri8ado% es setear los atributos pri0ados de un objeto# Para ello se deben asignar a los atributos% los 0alores de los par"metros pre0iamente mencionados# Luego Buardar los cambios#
l código asociado es el siguiente: ./;DO? constructor# peso N ipeso# color N icolor# tipoanimal N itipoanimal# subtipo N isubtipo# /./;DO?#
Para implementar los m=todos restantes seguir los pasos 1D ' >D de implementación de
m+todos# 4as"ndose en los puntos anteriores% se define el par"metro K?SP se implementa el m+todo?SP?ACO; .
Par&metros del m=todo ?SP?ACU;
Código para la mplementación del m=todo ?SP?ACU;: ./;DO? respiracion# >A iresp / TPerroT# :5>;/ J T5espiracion= PulmonarT# /LS/# :5>;/ J T5espiracion= 4ranuialT# />A# /./;DO?#
Para el m+todo OBT;?KTPOKA;2A+ definir el par"metro de retorno ?KTPOKA;2A+ e implementar el m+todo como se muestra a continuación#
Par&metros del m=todo OBT;?KTPOKA;2A+
Código para la mplementación del m=todo OBT;?KTPOKA;2A+: ./;DO? obtenertipoanimal#
rtipoanimal N tipoanimal# /./;DO?#
Pasos para agregar la inter(az a la superclase e implementar sus m=todos. 1) Ainali8adas las implementaciones de los m+todos de la superclase% se agrega la interfa8 QACCO;creada anteriormente a la misma# Para ello% ir a la solapa nter(aces escribir el nombre# Luego5uardar ' Activar #
2) Para crear par&metros a un m=todo de la inter(az:
K) Para implementar el m=todo de la inter(az en la superclase QKA;2A+:
el m=todo BB?. /scribir el siguiente código% luego 5uardar Activar la superclase#
Código para la implementación del m=todo QACCO;NBB?: ./;DO? 8accionbeber# ?$;$ msj ;MP/ string# -O<-$;/<$;/ T/l animal T itipoanimal Ttoma aguaT ><;O msj S/P$5$;/? 4M T T# :5>;/ J msj# /./;DO?#
Creación# de(inición e implementación de la Subclase QK?TB?A6O Se crea una subclase ue contendr" atributos ' m=todos propios% donde se 0er" reflejado la0erencia ' polimor(ismo.
Pasos para la creación de la subclase QK?TB?A6O 1) Se crea el objeto QK?TB?A6O Aceptar # Para reali8ar la 0erencia seleccionar el botón en la solapa de !Properties" colocar el nombre de la superclase (R$<>.$L)% una ?escripción marcar la opción 9inal. ?e esta manera se indica ue la subclase QK?TB?A6O 0eredar& las componentes de la superclase QKA;2A+. La opción 9inal indica ue QK?TB?A6O no tendr" subclases#
2) Se 0isuali8an los m=todos 0eredados de la superclase R$<>.$L# Se Activa la subclase R*/5;/45$?O para reflejar los m+todos implementados (marcados en celeste en la imagen siguiente) los ue deben redefinirse (marcados en negro) heredados de la superclase#
La subclase R*/5;/45$?O contendr" el atributo CA+6A6 los m=todos2OST?A?KCA?ACT?STCAS CO;ST?CTO?# Seguir los pasos 1) 2) de
definición e implementación de la superclase#
1D 6e(inir el atributo de la subclase QK?TB?A6O
2) /n la solapa .ethods definir el m+todo .OS;5$5-$5$-;/5>S;>-$S# Para la creación del -O
Se elige la opción R;o# para no copiar
?e esa manera uedan detallados l os m+todos definidos de la subclase R*/5;/45$?O=
K) Se muestra los par&metros del -onstructor:
Se implementa el m+todo del -Omplementación de CO;ST?CTO?= ./;DO? constructor# -$LL ./;DO? superFconstructor /HPO5;>
N isubpeso
icolor
N isubcolor
itipoanimal N isubtipoanimal isubtipo
N isubsubtipo#
cualidad N icualidad# /./;DO?# 6) Se definen los par&metros de entradasalida del m=todo 2OST?A?KCA?ACT?STCAS.
Por @ltimo% se escribe la implementación del m+todo .OS;5$5-$5$-;/5>S;>-$S=
Código para la mplementación del m=todo 2OST?A?KCA?ACT?STCAS: ./;DO? mostrarcaracteristicas# >A itipoanimal / TPerroT#
cualidad N T;iene 6 patas caminaT# /LS/# cualidad N TA# rcualidad N cualidad# /./;DO?#
?ede(inición de un m=todo de la inter(az QKACCO;. Las clases pueden rede(inir un m=todo 0eredado de una superclase o definido en una interfa8 para cumplir un propósito específico# 1) /n este caso se redefine el m+todo -O./5 definido en la inter(az QACCO; # ?entro del "rbol generado por los pasos anteriores% seleccionar el m=todo CO2?% luego presionar botón derecho elegir la opción ?ede(ine.
2) $l igual ue los m+todos implementados anteriormente% se necesitar& de(inir un par&metro (en este caso% un par"metro de entrada) en la nter(az QACCO; su correspondiente implementación en la clase R*/5;/45$?O# Luego se 5uarda ' se Activa.
Par&metros de del m=todo QACCO;NCO2? de(inidos en la inter(az QACCO;D:
;ota: ?esde la pantalla ue se 0isuali8a a continuación no es posible modificar los par"metros de entrada o salida a ue los mismos son definidos en la interfa8# Ina clase ue usa dicha interfa8% @nicamente implementa sus m+todos respetando los par"metros de cada uno# Los par"metros pueden ser modificados desde la interfa8 @nicamente#
Código para la mplementación del m=todo QACCO;NCO2?: ./;DO? 8accioncomer# -$LL ./;DO? superF8accioncomer /HPO5;>A itipoanimal / TPerroT# :5>;/ J TLos Perros comen huesoT# /LS/# :5>;/ J TLos Peces comen lar0asT# />A# /./;DO?#
Pasos para la creación de la Subclase QK;?TB?A6O Para la subclase QK;?TB?A6O solo ser" necesario crear un CO;ST?CTO? rede(inir el m+todo O4;/5;>PO$<>.$L# /sta clase no contendr" atributos m+todos propios# 1) La creación de esta subclase% reuiere repetir los pasos de la creación de la subclase QK?TB?A6O# $ continuación se muestra los componentes heredados=
2) ?esde la solapa 2et0ods presionar el botón CO;ST?CTO? definir los par"metros para ese m+todo (como se 0+ en la iamgen ampliada)=
Código para la mplementación del m=todo CO;ST?CTO?: ./;DO? constructor# -$LL ./;DO? superFconstructor /HPO5;>
N isubpeso
icolor
N isubcolor
itipoanimal N isubtipoanimal isubtipo
N isubsubtipo#
/./;DO?#
Pasos para ?ede(inir el m=todo CO2? de la inter(az QKACCO;. /l paso de redefinición del m=todo CO2? se repite del a mencionado para la clase QK?TB?A6O# 1) Se muestra el par"metro utili8ado (definido en la interfa8 R$-->O<) la implementación del
m+todo -O./5 en R*/5;/45$?O#
Código para la mplementación del m=todo QACCO;NCO2?: ./;DO? 8accioncomer# -$LL ./;DO? superF8accioncomer /HPO5;><;O msj S/P$5$;/? 4M T T# :5>;/ J msj# /./;DO?#
Creación del programa QP?BA para testear todas las componentes de(inidas anteriormente Se crea el programa QP?BA se utili8a el código siguiente para probar los m=todos
implementados. 5/PO5; 8prueba# # $rear refencias (perro% salmón% lombri& a sus respectivas clases' ?$;$= perro ;MP/ 5/A ;O 80ertebrado% salmon ;MP/ 5/A ;O 80ertebrado% lombri8 ;MP/ 5/A ;O 8in0ertebrado% nombre ;MP/ char29%
info ;MP/ string% msj ;MP/ string# S;$5;OAS/L/-;>O<# # $rear instancias de referencia ue apuntan a un objeto de la clase )*V+,-+.,!D/ -5/$;/ O43/-; perro ;MP/ 80ertebrado /HPO5;>
N 19
isubcolor
N T
isubtipoanimal N TPerroT isubsubtipo icualidad
N T.amíferoT N T T#
-5/$;/ O43/-; salmon ;MP/ 80ertebrado /HPO5;>
NV
isubcolor
N TBrisT
isubtipoanimal N TSalmónT isubsubtipo icualidad
N TPe8T N T T#
# $reo instancias de referencia ue apuntan a un objeto de la clase )*01V+,-+.,!D/ -5/$;/ O43/-; lombri8 ;MP/ 8in0ertebrado /HPO5;>
isubpeso
N1
isubcolor
N T5osaT
isubtipoanimal N TLombri8T isubsubtipo
N T$n+lidosT#
# Desde la referencia P+,,/ # 2tili&a los métodos heredados de la superclase )*!10M!" nombre N perroFobtenertipoanimal( )# -O<-$;/<$;/ T/l animal es T nombre ><;O msj S/P$5$;/? 4M T T# :5>;/ J msj#
salmonFrespiracion( nombre )#
#2tili&o el método de la subclase )*V+,-+.,!D/' info N perroUmostrarcaracteristicas( nombre )# :5>;/ J info#
#2tili&o métodos de la interfa&' perroF8accionbeber( /HPO5;>
SW>P 2#
#Desde la referencia S!"M/1
nombre N salmonFobtenertipoanimal( )# -O<-$;/<$;/ T/l animal es T nombre ><;O msj S/P$5$;/? 4M T T#
:5>;/ J msj# salmonFrespiracion( nombre )# info N salmonFmostrarcaracteristicas( nombre )# :5>;/ J info#
salmonF8accionbeber( /HPO5;>
SW>P 2#
#Desde la referencia "/M.,0)
#2tili&o los métodos heredados de la superclase )*!10M!" nombre N lombri8Fobtenertipoanimal( )#
-O<-$;/<$;/ T/l animal es T nombre ><;O msj S/P$5$;/? 4M T T# :5>;/ J msj#
lombri8F8accionbeber( /HPO5;>
na vez ejecutado el programa# la salida es la siguiente: