1
4 Programación orientada a objetos 4.1 Introducción a OOP. Crear Crear aplicaci aplicaciones ones en softwar software e involucr involucra a saber saber cómo represent representar ar los datos y cómo implementar las operaciones realizadas sobre aquellos datos. El procedimiento de los programas es pasar los datos a funciones, los cuales realizan las operaciones necesarias sobre los datos. El software orientado a objetos encapsula los datos y operaciones en objetos que interactúan con otros objetos vía una interface. atlab atlab nos permite permite crear crear programa programas s utilizand utilizando o ambas ambas t!cnicas t!cnicas por procedim procedimient iento o y orientada a objetos y usar objetos y funciones ordinarias en tus programas. Diseño de programa por procedimiento: En este caso tu dise"o se enfoca sobre los pasos que debes de ejecutar para lograr el estado deseado. #ípicamente los datos son representados como variables individuales o campos de una estructura e implementa operaciones como funciones que toman las variables como argumentos. $os programas usualmente usualmente llaman a una secuencia de funciones, cada una por el cual los datos pasan y entonces da como resultado el dato modificado. Cada función realiza una operación o tal vez muc%as operaciones sobre los datos. Diseño de programa orientado a objetos: El dise"o de programa orientado a objetos involucra lo siguiente& • •
•
'dentificar los componentes del sistema o aplicaciones que quieres construir. (nalizar e identificar patrones para determinar determinar que componentes componentes son usados repetidamente o comparten características. Clasificar las componentes basado sobre similaridades y diferencias.
)espu!s de realizar este an*lisis, se definen las clases que describen a los objetos que usas en la aplicación. Clase Clases s y objet objetos: os: +na +na clase clase descr describe ibe un conju conjunto nto de objet objetos os con con carac caracter teríst ística icas s comunes. $os objetos son las instancias instancias específicas de una clase o casos particulares particulares de una clase. $os valores contenidos en las propiedades de los objetos son lo que %acen que un objeto sea diferente de otras objetos de la misma clase +n objeto de clase double podría tener un valor de -. $as funciones definidas o asociadas a una clase llamado m!todos son los que implementan objetos cuyos comportamientos comportamientos son comunes a todos los objetos de una clase es posible adicionar / valores.
doubles independientemente de sus
2
4.2 Clases en atlab. En atlab, cada valor es asignado a una clase. 0or ejemplo, la creación de una variable con una instrucción de asignación construye una variable de la clase correspondiente&
Coman Comando dos s b*sic b*sicos os como como
whos muestra la clase de cada valor en el espacio de
trabajo. Esta información ayuda a los usuarios de atlab a reconocer que valores son cara caract cter eres es y lo mues muestr tran an como como te1t te1to, o, mien mientr tras as que que otro otros s valo valore res s podr podría ían n ser ser
double double , single single , u otros tipos de números. (lgunas variables pueden contener diferentes clases de valores como
cells .
4.! Clases de"inidas por usuario. Es posible crear tus propias clases en atlab. 0or ejemplo, podrías definir una clase para representar polinomios. Esta clase podría definir las operaciones típicas asociadas a las clases de atlab como suma, resta, inde1ado, mostrar en la ventana de comandos, etc. 2in embargo estas operaciones podrían necesitar realizar el equivalente a una suma, resta, etc. de polinomios. 0or ejemplo cuando sumas dos objetos polinomios&
p 1 + p 2 $a operación de suma debería saber cómo sumar objetos polinomios porque la clase polinomi polinomio o define define esta esta operació operación. n. Cuando Cuando defines defines una clase, clase, sobreca sobrecargas rgas funcion funciones es especiales de atlab plus.m para la operación de la suma que son llamados por el tiempo de ejecución de atlab cuando estas operaciones son aplicadas a un objeto de tu clase. 4.4 Clases en atlab # $%rminos cla&e. $as clases en atlab usan las siguientes palabras para describir las diferentes partes de una clase y conceptos relacionados. •
•
)efinición de clase 3 )escripción de lo que es común para todas las instancias de una clase objetos. 0ropiedades 3 (lmacenamiento de datos para las instancias de una clase.
3
•
•
•
•
•
•
•
•
!todos 3 4unciones especiales que implementan operaciones que son usualmente realizadas solo sobre las instancias de una clase. Eventos 3 ensajes que son definidos por las clases y que son difundidos por las instancias de una clase cuando se produce alguna acción específica. (tributos 3 5alores que modifican el comportamiento de las propiedades, m!todos, eventos y clases. 6yentes 3 6bjetos que responden a un evento especifico mediante la ejecución de una función callbac7 cuando se emite la notificación de eventos. 6bjetos 3 'nstancias de una clase, las cuales contienen valores de datos actuales almacenados en las propiedades de los objetos. 2ub8clases 3 Clases que son obtenidos desde otras clases y que %eredan los m!todos, propiedades y eventos de aquellas clases las sub8clases facilitan la reutilización de código definida en la super8clase de los cuales ellas son derivadas. 2uper8clases 3 Clases que son usadas como base para la creación de m*s clases definidas específicamente por ejemplo, sub8clases. 0aquetes 3 Carpetas que definen un espacio para la clase y nombres de funciones.
4.' (andle &s clases &alor. 9ay dos tipos de clase en atlab 3 la clase 9andle y la clase valor. •
•
$a clase 9andle, crea objetos que %acen referencia a los datos que contiene. Cuando se copia un objeto %andle, atlab copia el %andle pero no los datos almacenados en la propiedades del objeto. $a copia se refiere a los mismos datos que el %andle original. 2i cambia un valor de la propiedad en el objeto original, el objeto copiado refleja el mismo cambio. $a clase valor, realizan copias de los datos cada vez que el objeto se copia o se pasa a una función. $os tipos num!ricos de atlab son clase valor.
El uso de los tipos de clase depende del comportamiento deseado de las instancias de una clase y que características se quiere usar. +se una clase %andle cuando quieres crear una referencia al dato contenido en un objeto de la clase, y no querer copias del objeto para %acer copias de los datos del objeto. 0or ejemplo, usar una clase %andle para implementar un objeto que contiene información para una agenda telefónica. 0rogramas de múltiples aplicaciones pueden acceder a una agenda digital en particular, pero no puede %aber solo un conjunto de datos fundamentales. El comportamiento de referencia de %andles permite a estas clases soportar características como eventos, oyentes, y propiedades din*micas. +se la clase valor para representar entidades que no necesitan ser únicos como los valores num!ricos. 0or ejemplo, use una clase valor, para implementar un tipo de dato polinomial. Es posible copiar un objeto polinomial y entonces modificar sus coeficientes %acer un polinomio diferente sin afectar al polinomio original. 4.) Carpetas de una clase.
4
9ay dos caminos b*sicos para especificar las clases con respecto a carpetas& •
Creando un único arc%ivo de definición de clase auto contenida en una carpeta sobre el camino de atlab. El nombre del arc%ivo debe coincidir con el nombre de la clase y debe tener una e1tensión
. m . $a clase es definida enteramente en
este arc%ivo. )istribuyendo una definición de clase a múltiples arc%ivos en una carpeta : dentro del camino. 2olo una clase puede ser definida en una carpeta :. (dem*s, el paquete de carpetas el cual siempre comienza con un car*cter ;<= puede contener múltiples definiciones de clase, paquete de funciones de campos de aplicación, y otros paquetes. +n paquete de carpeta define un nuevo espacio en el cual puedas re%usar los nombres de la clase. +se el nombre paquete para referirse a clases y funciones definidas en el paquete carpetas por ejemplo, pac7agefld>, Class?ame(, pac7agefld/, •
4.* +lo,ues de construcción de clase. 2on las componentes b*sicas en la definición de la clase que describen de forma completa a la clase y especifican aspectos de su definición. 4.*.1 -l blo,ue El bloque
classdef
classdef contiene la definición de clase dentro de un arc%ivo que empieza
con la palabra clave
classdef y termina con la palabra clave
end .
classdef className
… end
En la línea •
classdef es donde se especifican&
(tributos de clase& $os atributos de clase modifican de alguna manera el comportamiento de la clase. (signar valores a los atributos de clase solo cuando quieras cambiar sus valores por defecto. ?o %ay cambios en los valores de los atributos por defecto.
classdef className
… end +no o m*s valores de atributos asignados&
5
classdef ( attribute 1= value,… ) className …
end
•
2uperclases 0ara definir una clase en t!rminos de una o m*s clases es importante especificar la superclases sobre la línea
classdef &
classdef classname < supeerclass 1name∧ superclass 2name>¿ …
end +na clase %andle %ereda de la clase %andle por ejemplo, la clase %andle como superclase
name classdef handle¿ handle …
end
El bloque
classdef
contiene las propiedades, m!todos y sub8bloques de
eventos.
4.*.2 -l blo,ue propiedades. El bloque propiedades uno para cada conjunto único de especificaciones de atributos contiene definiciones de propiedades, incluyendo valores iniciales opcional. El bloque propiedades empieza con la palabra clave
end .
classdef classname properties
…
properties y termina con la palabra clave
6
end
… end
Es posible controlar aspectos de la definición de propiedades de la siguiente manera& • • •
Especificando un valor por defecto para cada propiedad individualmente. (signando valores de atributos en función de cada bloque base. )efiniendo m!todos que se ejecuten cuando la propiedad es establecida o consultada.
9ay dos apro1imaciones b*sicas para inicializar los valores de las propiedades& •
En la definición de propiedad 3 atlab evalúa la e1presión solamente una vez y asigna el mismo valor a la propiedad de cada instancia.
classdef classname properties PropertyName No default Value assigned
PropertyName=‘sometext’; PropertyName =sin ( pi / 12) ; xpression returns default value
end end $a evaluación de los valores por defecto de propiedad ocurre solamente cuando el valor es primero necesario, y solamente una vez cuando atlab primero inicializa la clase. atlab no reevalúa la e1presión cada vez que se crea una instancia de clase. En el constructor de la clase 3 atlab evalúa la e1presión de asignación para cada instancia, el cual asegura que cada instancia tiene un único valor. 0ara asignar valores a una propiedad dentro del constructor de la clase, se %ace •
referencia al objeto que el constructor retorna la variable de salida
classdef "yclass properties
Property#ne
ob! &
7
end
methods function ob!= "yclass ( intval )
ob! . Property#ne =intval; end
end end #odas las propiedades tienen atributos que modifican ciertos aspectos del comportamiento de las propiedades. $os atributos especificados se aplican a todas las propiedades en un bloque de propiedades en particular. 0or ejemplo&
classdef classname properties PropertyName No default value assigned
PropertyName=sin ( pi / 12) ; xpresion retornael valor por defecto end
properties( set$ccess= private ,%et$ccess= private ) &tress
&train end
end
En este caso, solo los m!todos en la misma definición de clase puede modificar y consultar las propiedades
&tress
y
&train . Esta restricción e1iste porque la clase
define estas propiedades en un bloque de propiedades con los atributos
%et$ccess configurado como privado.
&et$ccess
y
8
Es posible definir m!todos que atlab llama cada vez que se establece o se consulta un valor de la propiedad. )efina la propiedad
set access o los m!todos
get access
en
los bloques de m!todos que no especifican atributos y tienen la siguiente sinta1is.
methods
function value = get . PropertyName ( ob!ect ) …
end function ob!= set. PropertyName( ob!, value)
… end
end
atlab no llama al m!todo de la propiedad
set access cuando se asigna el valor por
defecto especificado en el bloque de definición de la propiedad. 2i una clase %andle define la propiedad, el m!todo
set access no necesita retornar el objeto modificado.
4.*.! -l blo,ue de m%todos. El bloque de m!todos uno para cada conjunto único de especificaciones de atributos contiene las definiciones de función para los m!todos de clase. El bloque de m!todos empieza con la palabra clave
classdef className
methods …
end …
end
methods y termina con la palabra clave
end .
9
$os m!todos son funciones que implementan las operaciones realizadas sobre los objetos de una clase. $os m!todos, junto con otros miembros de la clase soportan el concepto de encapsulación 3 las instancias de clase contienen datos en propiedades y m!todos de clase operan sobre aquellos datos. Esto permite el funcionamiento interno de las clases que se ocultan del código fuera de la clase, permitiendo de esta manera la implementación de la clase cambiar sin afectar el código que es e1terno a la clase. $os !todos tienen acceso a miembros privados de sus clases incluyendo otros m!todos y propiedades. Esto nos permite esconder data y crear interfaces especiales que deben ser usados para acceder a los datos almacenados en objetos. 9ay tipos especializados de m!todos que realizan ciertas funciones o se comporta de una manera particular& •
•
•
!todos ordinarios& son funciones que actúan con uno o m*s objetos y retornan algún nuevo objeto o algún valor calculado. Estos m!todos son como las funciones ordinarias de atlab que no se puede modificar los argumentos de entrada. $os m!todos ordinarios permite clases para implementar operaciones aritm!ticas y funciones computacionales. Estos m!todos requieren de un objeto de la clase sobre el cual operar. !todos constructores son m!todos especializados que crean objetos de la clase. +n m!todo constructor debe tener el mismo nombre como la clase y típicamente inicializa los valores de propiedad con datos obtenidos desde los argumentos de entrada. $a clase m!todo constructor debe retornar el objeto que crea. !todos destructor son llamados autom*ticamente cuando el objeto es destruido, por ejemplo, si llamas
•
•
•
delete objeto o si no %ay referencias al objeto.
!todos de acceso a propiedad permiten una clase para definir código para ejecutar si un valor de propiedad es consultado o establecido. !todos est*ticos son funciones que son asociados con una clase, pero no necesariamente operan sobre objetos de clase. Estos m!todos no requieren una instancia de la clase para ser referenciado durante la invocación del m!todo, pero típicamente realiza operaciones en una forma específica a la clase. !todos de conversión, son m!todos constructor sobrecargados de otras clases que permiten a la clase convertir sus propios objetos a la clase constructor sobrecargado. 0or ejemplo, si tu clase implementa un m!todo entonces este m!todo es llamado en lugar de la clase constructor convertir tu objeto de clase a un objeto
•
double ,
double para
double de atlab.
!todos abstracto, sirven para definir una clase que no puede crear instancias, sin embargo sirve como un camino para definir una interface común usada por un numero de subclases. $as clases que contienen m!todos abstractos son con frecuencia referenciados como interfaces.
10
El m!todo constructor tiene el mismo nombre como la clase y retorna un objeto. Es posible asignar valores a las propiedades en la clase constructor. #erminar todas las funciones m!todo con una sentencia
end .
classdef 'lassName
methods functions ob!='lassName ( arg 1, arg 2, …)
ob!. ∝ 1 =arg 1 ; …
end function normalmethod ( ob! , arg 1, … ) … end
end methods ( &tatic =true)
function static method ( arg 1, … ) …
end end
end
atlab difiere de lenguajes como C<< y java en que no %ay una instancia de clase escondida especial p.e. el objeto
this pasado a todos los m!todos. )ebes pasar
un objeto de la clase e1plícitamente al m!todo. El argumento de m*s a la izquierda no necesita ser la instancia de clase, y la lista de argumentos puede tener múltiples objetos. Es posible definir m!todos de clase en arc%ivos que est*n separados del arc%ivo de definición de clase. 0ara usar múltiples arc%ivos para una difusión de clase, colocar los arc%ivos en una carpeta que tiene un nombre que comienza con el car*cter
(
11
seguido por el nombre de la clase. Estar seguro que la carpeta padre de la carpeta
( est* en la ruta de atlab. 0ara definir un m!todo en un arc%ivo separado en la carpeta de la clase
( , crea la
función en un arc%ivo separado, pero no uses un bloque de m!todo en aquel arc%ivo. ?ombre el arc%ivo con el nombre de la función como cualquier función. )ebes de colocar los siguientes m!todos en el arc%ivo
classdef , no en arc%ivos
separados& •
Constructor de clase
•
!todo
•
delete
#odas las funciones que usen puntos en sus nombres, incluyendo& o !todos convertidor, que convierten a las clases contenidas en paquetes, los cuales deben usar el nombre del paquete como parte del nombre de la clase. o
0ropiedad
set y m!todos de acceso
get .
2i especificas los atributos del m!todo para un m!todo que defines en un arc%ivo separado, incluya la firma del m!todo en un bloque de m!todos en el bloque
classdef .
0or ejemplo, el siguiente código muestra un m!todo con (ccess set a privado en el bloque de m!todos. $a implementación del m!todo reside en un arc%ivo separado. ?o incluya la función o palabra clave
end en el bloque de m!todos, solo la firma de la función
mostrando los argumentos de entrada y salida.
classdef 'lassName
∈a method bloc) , setthe method attributes ∧add the functionsignature methods ( $ccess= private ) output = my*unc ( ob!,arg 1, arg 2)
end end
En un arc%ivo llamado
my*unc.m , en la carpeta
('lassName , define la función&
12
function output = my*unc ( ob!,arg 1, arg 2 )
… end
4.*.4 -l blo,ue e&entos. El bloque eventos uno para cada conjunto único de especificaciones de atributos contiene los nombres de eventos que esta clase declara. El bloque de eventos empieza con la palabra clave
events y termina con la palabra clave
end .
classdef 'lassName events
… end
… end
0ara definir un evento, declaras un nombre para el evento en el bloque de eventos. Entonces uno de los m!todos de clase desencadena el evento usando el m!todo de notificación, el cual es un m!todo %eredado de la clase derivadas de la clase
handle pueden definir eventos. 0or ejemplo, la siguiente clase& &tate'hange .
•
)efina un evento llamado
•
)esencadene el evento usando el m!todo
classdef classname < handle &ubclass handle events +efine an event called &tate'hange &tate'hange
end …
methods
handle . 2olamente las clases
notify %eredado.
13
functionup+ate%- ( ob!)
… roadcast notice that &tate'hange event hasocurred
Notify ( ob!,’ &tate'hange ’ ) ; end end
end
Cualquier número de objetos puede ser escuc%ado por el evento para ocurrir. Cuando
notify
se ejecuta, atlab llama a todos los oyentes
callbac)s registrados y pasa el
handle del objeto generando el evento y una
estructura de evento a estas funciones. 0ara registrar un oyente el m!todo
&tate'hange
addlistener de la clase
callbac) , use
handle .
addlistener ( event ob! , ’ &tate'hange ’ , (my'allbac) ) 4.*.' -speci"icando atributos. $os atributos modifican el comportamiento de la clase y componentes de la clase propiedades, m!todos y eventos. $os atributos permiten definir comportamientos útiles sin necesidad de escribir código complicado. 0or ejemplo, puedes crear una propiedad de solo lectura por estableciendo su atributo y establecer su atributo
&et$cess a
private ,
%et$cess a public por defecto&
properties ( &et$ccess = private ) &creen&i/e =get&creen&i/e ;
end #odos
los
bloques
de
definición
de
clase
classdef , properties, methods , y events soportan atributos específicos y todos los atributos tienen valores por defecto. Especifique los valores de atributos solo en casos en los que desea cambiar el valor predeterminado a otro valor predefinido.
14
0osibles atributos para las clases son&
0idden , -nferior'lasses ,'onstruct#n1oad , &ealed . 0osibles atributos para las propiedades son&
$bort&et , $bstract , $ccess, 'onstant , +ependent , %et$ccess , %et#bservable , 0idden , &et$ccess , &et#bservable ,2ransient . 0osibles atributos para los m!todos son&
$bstract , $ccess , 0idden , &ealed , &tatic . 0osibles atributos para los eventos&
0idden , 1isten$ccess , Notify$ccess . 4. -jemplo: /na clase polinomial. Este ejemplo implementa una clase para representar polinomios en el lenguaje atlab. +na clase valor se utiliza debido a que el comportamiento de un objeto polinomio dentro del entorno de atlab debe seguir la sem*ntica de copia de otras variables de atlab. En contraste al ejemplo presentado en la documentación oficial del atlab, este ejemplo solo implementa las funcionalidades b*sicas para la clase polinomio. Esta clase sobrecarga un numero de funciones de atlab, tales como
polyval ,
diff y
roots ,
plot , de modo que estas funciones pueden ser usado con
el nuevo objeto polinomio. @.A.> Creando la carpeta y arc%ivo necesario. 0ara usar la clase %ay que crear una carpeta llamada guardar
+ocPolinomio . m
a
esta
carpeta.
$a
( +ocPolinomio carpeta
padre
y de
( +ocPolinomio debe estar sobre la ruta de atlab. 4..2 /sando la clase
+ocPolinomio .
$os siguientes ejemplos ilustran el uso b*sico de la clase
+ocPolinomio .
+ocPolinomio para representar los siguientes polinomios.
Crear los objetos
?ote que el argumento para la función constructor contiene los coeficientes del
f ( x )= x −2 x −5 y 3
polinomio
f ( x )=2 x + 3 x + 2 x −7.
P 1 = +ocPolinomio([ 1 0 −2−5 ])
P 1 =¿
4
2
15
3
3 − 2∗ x −5 P 2 = +ocPolinomio([ 2 0 3 2−7 ])
P 2 =¿ 2∗ x
4
+ 3∗ x 2 + 2∗ x −7
El m!todo
disp del
+ocPolinomio
muestra el polinomio en sita1is de
atlab. Encontrar las raíces del polinomio usando el m!todo de sobrecarga
roots . roots ( p 1 ) ans =¿ 2.0946
−1.0473 + 1.1359 i
−1.0473 −1.1359 i 0umar los dos polinomios p1 y p2. El tiempo de ejecución de atlab llama al m!todo plus definido por la clase
+ocPolinomio cuando sumas dos objetos
+ocPolinomio .
p 1 + p 2 ans =¿ 2∗ x
4
+ x 3 + 3∗ x 2−12
$as siguientes secciones describen la implementación de los m!todos ilustrados aquí tan bien como su implementación en detalle. 4..! -l m%todo constructor
+ocPolinomio .
$a siguiente función es el constructor de clase encuentra en el arc%ivo
+ocPolinomio , el cual se
( +ocPolinomio / +ocPolinomio . m &
16
$os coeficientes son almacenados en la propiedad
coef
de la clase
+ocPolinomio & classdef +ocPolinomio properties
coef end
methods function ob!= +ocPolinomio( c )
'onstruct a +ocPolinomioob!ect usingthe coefficientssupplied … 0intais de la llamada del constructor Es posible llamar al m!todo constructor con dos argumentos diferentes& 8 Cuando el argumento es un objeto polinomio 3 si llamas a la función constructor con un argumento de entrada que es un objeto polinomio, el constructor retorna un nuevo objeto polinomio con los mismos coeficientes como argumentos de entrada. $a función 8
isa c%equea esta situación.
Cuando el argumento de entrada es un vector de coeficientes 3 si el argumento de entrada no es un objeto
+ocPolinomio , el constructor
pretende reformar los valores dentro de un vector y asignarlos a la propiedad
coef .
El m!todo
coef property set restringe los valores de propiedad a double.
emo&er coe"icientes Irrele&antes atlab representa a los polinomios como vectores fila que contiene coeficientes ordenados por orden de potencia descendente. $os ceros en el vector coeficientes
17
representan t!rminos que no est*n presentes en el polinomio. $os ceros a la izquierda pueden ser ignorados cuando se forma el polinomio. (lgunos m!todos de la clase
+ocPolinomio usan la longitud del vector de coeficientes
para determinar el grado del polinomio. Es útil, por lo tanto remover los ceros de la izquierda del vector de los coeficientes de modo que su longitud representa el valor verdadero. $a clase
+ocPolinomio almacena los coeficientes del vector en una propiedad que
usa un m!todo set para remover los ceros a la izquierda desde los coeficientes especificados antes de establecer el valor de propiedad.
+n ejemplo del constructor es lo siguiente&
P= +ocPolinomio ([ 1 0−2 − 5 ]) 3
P= x 4 2∗ x 4 5
Este ejemplo crea un ejemplo de la clase
+ocPolinomio
con los coeficientes
especificados en el argumento de la función. ?ote como los m!todos de la clase muestran el polinomio equivalente usando la sinta1is de atlab. $a clase implementa usando los m!todos de clase
4..4 Con&irtiendo objetos de la clase
disp y
+ocPolinomio
char .
+ocPolinomio a otros tipos de clases.
lo
18
$a clase
+ocPolinomio
define dos m!todos para convertir objetos de la clase
+ocPolinomio a otras clases& •
double 3 Convierte al tipo num!rico est*ndar de atlab, de modo que se pueda realizar operaciones matem*ticas con los coeficientes.
•
char 3 Convierte a cadena de caracteresB usado como formato de salida para mostrar en la ventana de comandos.
Convertir la clase
+ocPolinomio
a la clase
double , el m!todo de conversión
simplemente consiste en retornar un vector de coeficientes el cual es por definición del tipo
double .
0ara el objeto
+ocPolinomio p&
El cual tiene la clase
double
19
+ocPolinomo
Convertir de la clase
a la clase de caracteres El m!todo
char
produce una cadena de caracteres, que representan los polinomios mostrados como potencia de una variable independiente. 0or lo tanto, despu!s de que se especificó un valor para 1, se retorna la cadena de características es una e1presión sint*cticamente de atlab, el cual se puede evaluar El m!todo
char usa un array del tipo
cell para coleccionar las componentes de la
cadena de caracteres que componen el polinomio mostrado. El m!todo
disp usa
char para formatear el objeto )oc0olinomio con la finalidad de
mostrarlo. $os usuarios de la clase directamente no llaman a los m!todos
disp , sin embargo estos m!todos permiten que la clase
char
y
+ocPolinomio se comporte
como clase de datos en atlab. ( continuación se muestra el m!todo
4..' %todo
char .
disp de la clase +ocPolinomio .
0ara proporcionar una visualización m*s útil del objeto considera al m!todo El m!todo
+ocPolinomio , esta clase
disp en la definición de la clase.
disp se basa en el m!todo
char para producir una representación de
cadena de caracteres del polinomio, como se muestra a continuación.
20
4.3 De"iniendo el operador 2i
p y
‘+’
5 son objetos de la clase
+ocPolinomio , la e1presión
p + 5
enera una llamada a la función
( +ocPolinomio / plus
$a siguiente función redefine el operados m*s
+¿
para la clase
+ocPolinomio &
$a función trabaja de la siguiente manera& •
(segurar que ambos argumentos de entrada son objetos
+ocPolinomio
de
modo que la e1presión tal como
P + 1
Due invoca a la clase •
•
+ocPolinomio y
double , esto trabaja correctamente.
(cceder a los dos vectores de coeficientes y si es necesario llenar a uno de ellos con ceros que %acerlos de la misma longitud. El resultado de la suma es simplemente un vector suma de dos vectores coeficientes. $lamar al constructor
4.1 5unciones de atlab
+ocPolinomio para crear un resultado apropiado. roots y polyval para la clase +ocPolinomio .
Es posible cargar funciones del atlab y %acerlas trabajas en forma conjunta con la nueva clase
+ocPolinomio . En el caso de objetos
+ocPolinomio , los m!todos de carga
21
simplemente pueden aplicar la función original de atlab a los coeficientes por ejemplo, los valores obtenidos de la propiedad
coef .
Esta sección muestra cómo implementar las siguientes funciones de atlab. 4.1.1 De"iniendo la "unción El m!todo
roots
roots .
de la clase
+ocPolinomio encuentra las raíces de los objetos
+ocPolinomio por pasando los coeficientes a la función
4.1.2 De"iniendo la "unción $a función m!todo
roots cargada de atlab.
polyval .
polyval de atlab evalúa un polinomio en un conjunto de puntos dado. El
polyval de la clase +ocPolinomio simplemente e1trae los coeficientes de
la propiedad
coef y entonces llama a la función
potencias de
x &
El siguiente código evalúa el polinomio el resultado.
polyval de atlab para calcular las
2 p= x −2∗ x −5 para x =−2:0.1:2 y dibuja