viernes, 25 de marzo de 2011

SIMBOLOGIA

CASOS DE USOS


Qué es un Actor?

Un actor puede intercambiar activamente información con el sistema
Puede ser un receptor pasivo de información
Puede representar a una persona, maquina o a otro sistema.
No son parte del sistema, representación roles que los usuarios

Tipos de actor
Actores primarios  son usuarios del sistema cuyos objetivos son satisfechos por medio de servicios que ofrece el sistema
Actor de soporte: provee un servicio

Qué es un rol?
 Es todo lo que puedo hacer, como delegar funciones

 
Cuantos roles puede tener un usuario?
 Los que sean necesarios
 

Cuantos niveles de Diagramas de Casos de uso existen  y menciónelos.

Actores, dependencias, generalización y relaciones de asociación.
En el diagrama de casos de uso se representa también el sistema como una caja rectangular con el nombre en su interior. Los casos de uso están en el interior de la caja del sistema, y los actores fuera, y cada actor está unido a los casos de usos en los que participa mediante una línea.

Los niveles son:
los elementos.
Los actores.
Casos de usos.
Relaciones entre caso de uso.


Qué hacer cuando el diagrama de caso de uso es muy grande y no cabe en una sola hoja?

debemos tener en cuenta que nuestro diseño debe ser claro, fácil de modificar, y fácil de leer por otras personas. Para esto podemos dividir el diagrama en bloques de diseño. “divide y vencerás”, la idea principal es dividir un esquema grande en diagramas pequeños fáciles de manejar.
 Se divide en módulos  o en niveles

miércoles, 9 de marzo de 2011

POO


La programación Orientada a objetos (POO):

Es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación.
Con la POO tenemos que aprender a pensar las cosas de una manera distinta, para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.
Motivación
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO. Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de quien la programa, de manera que la forma de hacer las cosas puede ser diferente según el programador. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así nos podemos aprovechar de todas las ventajas de la POO. 

Cómo se piensa en objetos
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.
Clases en POO
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas. 


Propiedades en clases
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.
Métodos en las clases
Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instace que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser distinta dependiendo el lenguaje de programación que se emplee, pero será algo parecido a esto.
miCoche = new Coche()
Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros con los que inicializar el objeto de la clase coche.
Estados en objetos
Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de una propiedad de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignación. 

Mensajes en objetos
Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto coche que se ponga en marcha estamos pasándole el mensaje “ponte en marcha”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a una función, dentro irían los parámetros.
Otras cosas
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas más básicas. También existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades más potentes de la POO.


La herencia:
sirve para crear objetos que incorporen propiedades y métodos de otros objetos. Así podremos construir unos objetos a partir de otros sin tener que reescribirlo todo.
En programación, mecanismo que permite derivar características de una clase a otra y así extender sus funcionalidades. Uno de sus funciones más importantes es proveer polimorfismo. Existen dos tipos de herencias:
Herencia simple: una clase sólo puede heredar características de una sola clase, o sea, puede tener un padre.
Smalltalk, Java y Ada soportan herencia simple.
Herencia múltiple: una clase puede heredar características de una o más clases, por lo tanto, puede tener varios padres.
C++ soporta herencia múltiple.
La herencia es una de las características de los lenguajes del paradigma
orientado a objetos.

Que es polimorfismo

polymorphism). En
programación, polimorfismo es una característica de un lenguaje de programación que permite a los valores de diferentes tipos de datos ser manejados usando una interfaz uniforme. También hay funciones polimórficas: es una función que puede ser evaluada o ser aplicada a valores de diferentes tipos.

Dos tipos de polimorfismo: ad-hoc y paramétrico

Existen dos tipos de polimorfismo:

* Polimorfismo ad-hoc: si el rango de tipos actuales que pueden ser usados es finito y las combinaciones deben ser especificadas individualmente antes de usarse.

* Polimorfismo paramétrico: si todo el código es escrito sin mención de ningún tipo específico y así poder ser usado transparentemente con nuevos tipos.

En
programación orientada a objetos, el poliformismo ad-hoc es generalmente soportado a través de la herencia, por ejemplo, objetos de diferentes tipos pueden ser tratados uniformemente como miembros de una superclase común. El poliformismo ad-hoc es también soportado en muchos lenguajes usando funciones y métodos sobrecargados.

El polimorfismo paramétrico es ampliamente soportado en lenguajes de programación funcionales de tipado estático.


El polimorfismo
sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando, y abstraernos para definir un código que sea compatible con objetos de varios tipos.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar que existen libros enteros dedicados a la POO y aquí solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengáis que poneros delante de ellas en los lenguajes de programación que debe conocer un desarrollador del web.
Ejemplo concreto de programación orientada a objetos
Para conseguir un ejemplo concreto de lo que es la programación orientada a objetos, podemos entrar en el Manual de PHP 5. Realmente este manual explica las características de orientación a objetos de PHP 5 y ofrece ejemplos concretos de creación de clases con características como herencia, polimorfismo, etc.

¿Qué es una Clase?

Cuando decimos “ave”, sabemos que nos referimos a “algo” con plumas, pico, dos patas, etc. No importa realmente si hemos visto un ave o no, o si tenemos un ave frente a nosotros; entendemos claramente que la palabra “ave” se refiere a alguna cosa que cumple con unas características específicas, se comporta de una forma concreta, etc, etc. No es más que una palabra, pero nos permite clasificar las cosas. Por ejemplo, sabemos que una gallina es un ave y que un perro no es un ave.
La clasificación es algo que hacemos todos los días, a cada momento (entre otras cosas, nos libra de utilizar medias como guantes o bañarnos en el comedor en vez de en la ducha). Cada vez que decimos que algo es alguna cosa, estamos clasificándolo, asociándolo a una clase.
Sin embargo, sabemos que la palabra ave no se refiere a un animal concreto, sino a una serie de animales. Ave es la palabra que usamos para identificarlos en un grupo, pero no podemos decir hoy haré volar la palabra “ave” (bueno, puedes decirlo, pero estarás cada vez más cerca del manicomio), en tal caso siempre nos referiremos a esta o aquella ave, siempre hablaremos de un animal concreto. La palabra es lo que conocemos como un concepto, una abstracción.
En la POO ocurre igual, una clase no es más que una serie de código que define a todos los elementos relacionados con ella. Así, podríamos escribir la clase ave colocando en ella todas las características que tienen las aves (pico, color, alto, ancho, patas,…) esas características las llamaremos en lenguaje de programadores, propiedades.
Pero la cosa no termina allí, resulta que las aves tienen también ciertos mecanismos específicos, como comer, dormir, reproducirse (¡aléjate Pertvertvaz! ), etc. Estos mecanismos los llamamos métodos.
Por último, también sabemos que las aves reaccionan ante ciertos sucesos, como peligro, atracción, defensa… A esto lo llamaremos eventos.
Entonces, vemos que una clase es algo así como el concepto de lo que queremos hacer, es como la idea (concebida al detalle) de la cosa, del objeto; pero igual que con las ideas, no puedo hacer nada directamente con una clase (puedes sentarte en una silla, pero no en tu idea de una silla). Sin embargo, esta idea será la que dé forma al objeto que crearemos (que tendrá las características, mecanismos y comportamientos que habíamos pensado en nuestra idea).

¿Qué es una Instancia?

Bien, decíamos que una clase es como la definición de un objeto, pero no es el objeto en sí, del modo como una idea no es una cosa física (el ejemplo de la silla). Así que para sentarnos necesitaremos convertir esa idea en algo, en un objeto real; a ese objeto lo llamamos instancia.
En un mismo proyecto puedo tener una o más instancias de una misma clase sin problemas.
Cada vez que creamos una nueva instancia, ésta adquiere las propiedades, métodos y eventos de la clase a la que pertenece (es lo que permite la relación es un), sin embargo, cada instancia es independiente de las otras; esto nos da dos ventajas:
  1. Si hago algún cambio en la clase, todas las instancias de esta clase se actualizarán automáticamente; esto nos permite hacer cambios sin tener que ir a cada una de las instancias (se aplica el mismo principio de herencia, aunque a un nivel diferente).
  2. Al ser independientes de las otras instancias, puedo darles valores diferentes sin que afecten a las demás (como tener una silla negra, una roja, una más alta, etc.). Aunque comparten la misma estructura, pueden programarse individualmente, dando versatilidad y flexibilidad al código.
Ahora que entendemos (más o menos) cómo funciona la teoría básica de la P.O.O. y sabemos acerca de la importancia de las clases, es momento para que veamos cómo sería la estructura de una clase.
Es importante tener en cuenta que cada lenguaje tiene, de acuerdo a su sintaxis, sus propias normas sobre cómo escribir clases. No será lo mismo en PHP que en AS2 o incluso AS3. Así que, primero, hablaremos en un sentido más general, para luego pasar a la práctica concreta. Para los efectos, usaremos como lenguaje de ejemplo Action Script 2.0.

Estructura de la Clase

Los elementos básicos de una clase se estructuran de la siguiente forma (más abajo definiremos cada elemento):
  1. Paquete al que pertenece la clase (package – sólo en AS3, en AS2 se incluye en la Definición de la Clase).
  2. Definición de la Clase (class – En AS2, si la clase está incluida en un paquete, se usa la sintaxis paquete.clase).
  3. Variables Internas (Son de uso interno de la clase, por lo que se restringe su uso fuera de ellas con la palabra clave private, así la variable miVar, de tipo numérico, podría definirse así:
    privatevarmiVar:Number = 0;)
  4. Constructor de la Clase (excepto en el caso de las clases estáticas, pero de eso hablaremos en otro post).
  5. Propiedades, Métodos y Eventos de la Clase (no necesariamente en ese orden, pero es una buena forma de organizarlo).
Por supuesto, una clase bien hecha contiene además comentarios con información sobre la clase, la forma de usarla, su autor, etc. En este caso lo omitimos para concentrarnos en lo básico y no enredarnos más de lo estrictamente necesario.
Dicho esto, veamos los puntos nombrados arriba en una clase de ejemplo, para luego pasar a explicar los conceptos:
Para crear una nueva instancia de la clase Persona debemos importarla y luego instanciar con la palabra clave new, pasándole los parámetros que necesita:
importcesarfrick.Persona;
varcesar:Persona = new Persona("César", "Frick", 36);
Ahora expliquemos de qué se trata lo que hemos dicho:
Paquete:
Aunque podemos colocar nuestras clases en el mismo directorio donde se encuentra el archivo que los usará, siempre resulta más ordenado y eficiente clasificarlos en carpetas, donde podemos colocar aquellas clases que tienen un mismo propósito. Así podemos tener una carpeta llamada graph para clases de tipo gráfico, externalData para clases que conectan y/o procesan datos externos, etc. Estas carpetas son conocidas como paquetes.
Otra ventaja de usar paquetes (además de mantener nuestras clases ordenadas) es que nos permiten importar todas las clases que necesitemos de ellos con sólo una línea: import paquete.*, en vez de tener que hacer un import para cada clase. Si te preocupa que terminen importándose más clases de las que necesitas de ese paquete, no hay problema porque sólo se importarán las que sean necesarias y no las que no utilices en el código.
En algunos lenguajes, existen palabras reservadas para declarar el paquete al que pertenece una clase (como en el caso de AS3), en estos casos va primero la declaración del paquete y luego la de la clase. En AS3 sería de esta forma:
packagenombreDelPaquete{
classNombreDeLaClase{
...
}
}
Clase:
La clase, propiamente dicha, se declara con la palabra clave class.
Hay un par de cosas que debemos tener en cuenta cuando creamos una clase:
  • No es obligatorio, pero por regla general -los entendidos lo llaman convención y es cuando todos se ponen de acuerdo en hacer algo de la misma forma (¡ja! como si tal cosa fuese posible. Errr… perdón, eso es otro tema)- los nombres de las clases siempre comienzan con mayúsculas.
  • Esto si es obligatorio: El archivo donde se encuentra la clase debe tener el mismo nombre que ésta, respetando mayúsculas y minúsculas. Esto es importante porque los import usan el nombre del paquete (si lo hubiere) y la clase para ubicarlos en el disco, así que si usas diferentes nombres, nunca los hallará y dará error.
  • Si el lenguaje no tiene una palabra reservada para definir el paquete (AS2, por ejemplo), la definición de la clase sería así:
classnombreDelPaquete.NombreDeLaClase{
...
}
Variables Internas o Privadas:
En último término, todas las propiedades de una clase son en realidad variables, pero no es conveniente que el usuario de la clase pueda manipular directamente estas variables, por ello se mantienen privadas, es decir, sólo pueden llamarse y manipularse dentro del código de la clase, pero no fuera de ellas (o sea que si se trata de llamar a una de estas variables desde la instancia, no funcionará). Para hacer que una variable/función sea privada, se le antepone la palabra private

Constructor:

Es la función que se ejecuta cada vez que se crea una instancia de la clase, Si necesitamos que nuestra clase inicie con ciertos valores, colocamos los parámetros correspondientes entre los paréntesis. La función constructora siempre devuelve Void (Vacío).
También puede haber casos en los que no queramos que la clase constructora ejecute ningún código. Para ello simplemente la colocamos vacía, es decir, la declaramos pero no ponemos código en ella. Si una clase no tiene un constructor, no puede ser instanciada.
Propiedades, Métodos y Eventos de la clase:
Decíamos antes que las propiedades son realmente variables dentro de la clase, pero para poder controlar qué puede cambiar o no el usuario de la clase, si los valores son correctos, etc. hacemos uso de unas funciones especiales para definir propiedades: get y set.
·         get permite al usuario recuperar el valor de la propiedad, leerlo, por lo que su salida debe ser correspondiente con la que se espera de la propiedad (por ejemplo, no tendría sentido que la propiedad “nombre” del ejemplo devolviese un número). Si sólo creamos una función get para una propiedad, ésta es de sólo lectura.
·         set es usado para darle un valor a la propiedad, normalmente se añaden aquí los controles para asegurarse que el valor que se asigna es del tipo deseado (y evitar que la clase colapse por un error de tipo de datos). La función de set, al ser para escribir en la propiedad no devuelve ningún tipo de datos, pero debe tener un parámetro que es el valor que se pasará a la variable. Al contrario de get, no puede haber una clase de sólo escritura (después de todo, no tiene ningún sentido tener una propiedad a la que se le pueda asignar un valor pero este no pueda ser recuperado).
·         Los métodos no son más que funciones públicas, que pueden tener o no datos y que afectan a la instancia de alguna forma.
·         Los eventos, al igual que los métodos, son funciones, pero estos reaccionan ante alguna interacción del usuario o pueden ser reescritos por éste. A ellos dedicaremos un post especial.
Bien, como ven escribir una clase no es tan complicado como puede pensarse en un principio. Luego hablaremos de las ventajas/desventajas de usar clases, pero por ahora creo que ha sido bastante (al menos yo estoy exhausto ). Sólo decir que si les resulta muy complicado lo que ven acá, repasen los posts anteriores (seee, he tardado mucho en escribir éste) para que lo vean en contexto. También decir que en este caso y todos los que vengan escribiremos el código siguiendo las reglas del Strict Data Typing (Tipeo Estricto de Datos), al que le daremos unas líneas en el próximo post.
sintaxis.
(Del lat. syntaxis, y este del gr. σνταξις, de συντσσειν, coordinar).
1. f. Gram. Parte de la gramática que enseña a coordinar y unir las palabras para formar las oraciones y expresar conceptos.
2. f. Inform. Conjunto de reglas que definen las secuencias correctas de los elementos de un lenguaje de programación.

Atributos

En informática, característica de un archivo o carpeta que lo hace oculto, de sistema, de solo lectura, etc.

En algunas versiones de
Windows, se incluyen atributos avanzados como compresión, encriptación, indexado, etc.

2. En
bases de datos, un atributo representa una propiedad de interés de una entidad.

Los atributos se describen en la
estructura de la base de datos empleando un modelo de datos.

Por ejemplo, se podría tener una entidad llamada "Alumno". Esta entidad puede estar constituida por uno o más
atributos, que son propiedades de la entidad "Alumno" que interesan para almacenarse en la base de datos. Por ejemplo, la entidad "Alumno" podría tener los atributos: nombre, apellido, año de nacimiento, etc.

La elección de los atributos de una entidad depende del uso que se le dará a la base de datos. El alumno puede tener una "religión", pero si no interesa al fin de la base de datos, no es necesario almacenarla en un atributo.

En
SQL un atributo es llamado columna.

Que es parámetros

parameter) En informática, un parámetro es un tipo de
variable que es recibida por una función, procedimiento o subrutina.

Un parámetro influye en el comportamiento o el resultado de la ejecución de la función, procedimiento o subrutina (de ahora en más sólo procedimiento) que lo recibe. Son muy utilizados en la
programación.

En general, en la definición de un procedimiento, es incluida una lista ordenada de parámetros; de esta manera, cada vez que el procedimiento es llamado, los argumentos de esa llamada pueden ser asignados a los correspondientes parámetros. Aquí se expone sutilmente la diferencia técnica entre parámetro y argumento, aunque muchas veces son tratados como sinónimos.

La semántica de cómo pueden ser declarados los parámetros y cómo los argumentos son pasados a los parámetros de los procedimientos, son definidos por cada
lenguaje de programación.

Formas de pasar un parámetro

En forma general, existen dos formas de pasar un parámetro a un procedimiento: por valor y por referencia.

Un parámetro se pasa por valor cuando se copia su contenido y si es alterado su valor dentro del procedimiento no se modifica el parámetro original. En cambio cuando un parámetro es pasado por referencia, si se modifica su valor dentro del procedimiento, se ve modificado el original.

Tipos de datos

En
lenguajes de programación fuertemente tipados, cada tipo de parámetro debe ser explícitamente especificado en la declaración del procedimiento. En tanto en los lenguajes que utilizan inferencia de tipos intentan descubrir los tipos automáticamente del cuerpo de la función y su uso. En lenguajes de programación débilmente tipados, el tipo del parámetro es resuelto en tiempo de ejecución.

Algunos lenguajes emplean una palabra clave especial (por ejemplo, void) para indicar que ese procedimiento no tiene parámetros.

Diferencia entre parámetro y argumento en programación

En general las palabras argumento y parámetro son tomadas como sinónimos; en realidad hay diferencia: los parámetros aparecen en la definición del procedimiento, los argumentos aparecen en los llamados a procedimientos.

Un parámetro es una propiedad intrínseca de un procedimiento, dado que está incluido en su definición. En tanto, los argumentos son más bien los valores actuales asignados a los parámetros variables cuando la subrutina es llamada. En la práctica no se suele distinguir tajantemente entre ambos términos.
Que es Encapsulación
Proceso encapsulación/desencapsulación: el origen encapsula datos en paquete con direcciones ip de origen y destino, luego encapsula el paquete en una trama con dirección MAC origen y destino; envía la trama según bits del cable, la recibe el gateway de origen, el routerdesencapsula y revisa su tabla de enrutamiento para ver si existe, encapsula en formato de trama adecuado para interfaz de salida con nuevas direcciones de origen y destino de Capa2, y envía la trama de interfaz.

Accesores

Las variables instancia de un objeto son sus atributos, eso que diferencia a un objeto de otro dentro de la misma clase. Es importante poder modificar y leer estos atributos; lo que supone definir métodos denominados //accesores de atributos//. Veremos en un momento que no siempre hay que definir los métodos accesores explícitamente, pero vayamos paso a paso. Los dos tipos de accesores son los de //escritura// y los de //lectura//.

|| ruby>class Fruta
ruby| defset_kind(k) # escritor
ruby| @kind = k
ruby| end
ruby| defget_kind # lector
ruby| @kind
ruby| end
ruby| end
nilx
ruby> f1 = Fruta.new
#<Fruta:0x401c4410>
ruby> f1.set_kind("melocotón") #utilizamos el escritor
"melocotón"
ruby> f1.get_kind #utilizamos el lector
"melocotón"
ruby> f1 #inspeccionamos el objeto
#<Fruta:0x401c4410 @kind="melocotón">
||

Sencillo; podemos almacenar y recuperar información sobre la clase de fruta que queremos tener en cuenta. Pero los nombres de nuestros métodos son un poco largos. Los siguientes son más breves y convencionales:

|| ruby>class Fruta
ruby| defkind=(k)
ruby| @kind = k
ruby| end
ruby| defkind
ruby| @kind
ruby| end
ruby| end
nil
ruby> f2 = Fruta.new
#<Fruta:0x401c30c4>
ruby> f2.kind = "banana"
"banana"
ruby> f2.kind
"banana"
||