viernes, 21 de octubre de 2011

Instanciación de una clase/Referencia a objeto/Métodos, Declaración de métodos, mensajes, paso de parámetros, retorno de valores, Constructores y destructores


Instanciación de una clase.

La instancia de una clase es un objeto de una clase respectiva, recuerde que una clase es el molde para los objetos, asi la clase “Carro” puede tener varias instancias (objetos) ejemplo “carro1” es la instancia (objeto)

Recuerda que una clase puede tener varias instancias, se debe recordar que cuando se dibuje la instancia (objeto) de una clase en la parte de arriba se escribe el nombre de la instancia (objeto) empezando con minúscula y poniendo dos puntos al final, y en la parte de abajo se escribe a la clase a la que pertenece, debes recordar que el nombre de una clase empieza con mayúscula.

Muy bien ahora cree varias instancias (objetos) de una misma clase a partir de las clases que ha creado anteriormente, y después cree mas instancias de diferentes clases. Le debe quedar muy similar como las siguiente imagen.







Referencia a objeto

Cada vez que se crea una clase se añade otro tipo de dato que se puede utilizar igual que uno de los tipos simples. Por ello al declarar una nueva variable, se puede utilizar un nombre de clase como tipo.





Esto ya lo mencionamos anteriormente pues una campo puede ser también de tipo objeto, ¿Qué quiere decir esto? Pues que en lugar de ser int o float puede ser el nombre de la variable. Cabe destacar que todo lo que se guarde ahí no se guarda directamente en la variable, como lo que ocurría con las variables primaticas. Acá se creara una referencia, lo que hará que se guarde en otro objeto.

Ahorita lo veremos muy levemente ya que nos meteremos en este tipo de variable más adelante, por lo tanto no se desesperé de no haber entendido lo anterior.

Un ejemplo sería el siguiente

private VisorDeNumeros minutos;


Nos podemos dar cuenta que acá el campo es privado y que es de tipo VisorDeNumeros minutos


Métodos, Declaración de métodos, mensajes, paso de parámetros, retorno de valores, Constructores y destructores


Constructor



Podemos decir que un constructor es un tipo de método que se encarga de inicializar el estado de un objeto, por ejemplo si creamos un campo de tipo entero llamada ano_de_naciemiento el constructor lo que hará es iniciar ese campo a cero, o lo pude iniciar a otro como 1992, se inicializan con el fin que se pueda usar, java inicializa los campos por defectos pero es recomendable inicializarlos para saber que está haciendo el programa que estamos escribiendo. Para variable enteras java las inicializa en 0 pero sin embargo si queremos que se inicialice con 1990 será necesario decirle eso en el constructor.

Esto quedara más claro con el siguiente ejemplo


public class Persona
{

private int ano_nacimiento;
private String nombre;

public Persona()
{
ano_nacimiento=0;
nombre=("");
}

public String Mostar_nombre()
{
return nombre;
}

public int Mostar_ano_de_naciemiento()
{
return ano_nacimiento;
}

public void Mostrar_detalles()
{
System.out.println("El nombre de la persona es " + nombre + " y su año de nacimiento es " + ano_nacimiento);
}

public void Cambiar_ano_nacimiento(int anna)
{
ano_nacimiento=anna;
}

public void Cambiar_nombre(String no)
{
nombre=no;
}

}


Muy bien la primera línea como dijimos anteriormente es la que le da el nombre de la clase, en este caso, esta clase la llamamos Persona, después se abre la llave de la clase, pero no se cierra todavía, recuerda que esa será la última llave que cerraras
Luego se declaran los campos ano_nacimiento y nombre (nótese que son primitivos ya que no se hace referencia a otro objeto) uno de tipo entero (int) y el otro de tipo cadena (String). Es importante que recuerdes que los campos no se declaran dentro de ningún método o constructor, si no que se declaran afuera de la clase

A continuación escribimos nuestro constructor el constructor de una clase siempre se debe llamar igual que el nombre de la clase y este puede tener o no tener parámetros, el ejemplo queda public Persona () podemos ver que la única diferencia con el nombre de la clase es que este no posee la palabra “class”, pues no es una clase si no un constructor de la clase
La sintaxis es:
public + nombre de clase() 


Donde public es ya que queremos que cualquier elemento de la clase puede acezar a ese constructor y el nombre como dije, debe ser el mismo que el da la clase, a continuación se abre y cierra paréntesis ya que este constructor no pide ningún paramento, en los párrafos de abajo vernos como queda en caso que pida uno o más parámetros, después de la signatura del constructor abrimos una llave, después se inicializa ano_nacimiento y nombre.
Cabe destacar que al terminar cada sentencia esta debe llevar un punto y coma, después se procede a cerrar la llave del constructor. Con esto nuestro constructor ya quedo listo

Luego escribimos la signatura de un método de acceso que retornara un valor, cuando hablo de retornar no me refiero que lo imprima, si no que el sistema internamente regresa un valor, pero como en bluej es muy amigable podemos ver el valor retornado. La signatura queda de la siguiente manera
public String Mostar_nombre()


Donde public una vez mas es porque queremos que ese método se puede acceder desde cualquier parte de la clases, String se pone por qué el valor a retornar es un cadena (Letras), si el método retornara un valor entero fuera int, o si el método no retornara ningún valor se escribe la palabra void, por último se pone el nombre del método, acá uno le puede poner el nombre que quieras, claro sin dejar espacios, por eso yo separo con guiones bajos. Este método no pide ningún parámetro por eso se abre y cierran los paréntesis, ósea que para trabajar no necesita información extra, mas a bajo en este mismo ejercicio veremos un método que pida parámetros.

Después se abre una llave y continuación, se escribe abajo return nombre; como siempre no debemos olvidad poner punto y coma al final de cada sentencia, por último se cierra la llave del método

Luego se escribe otro método para mostrar el año de nacimiento, este método es muy similar al anterior solo que la única diferencia es que retorna un valor entero y por eso se escribe en la signatura lo siguiente

public int Mostar_ano_de_naciemiento()


Se debe notar que ahora en lugar de String se escribe int, ya que el valor a retornar será de tipo entero, nuevamente no pide ningún parámetro para funcionar, y nos damos cuenta que es un método de acceso y tiene un retorno.

Luego se cierra la llave del método y se procede a escribir un nuevo método, este nuevo método será un poco mas diferente a los otros, lo principal será que este no tendrá un retorno por lo que ahora en lugar de escribir el tipo de dato que retorna se escribe la palabra void, la signatura del método queda de la siguiente forma
public void Mostrar_detalles()

Una vez mas es public, luego se escribe void porque este método no retornara un valor, sino que este imprimirá los detalles, luego se abre la llave y después se escribe la sentencia siguiente:

System.out.println("El nombre de la persona es " + nombre + " y su año de nacimiento es " + ano_nacimiento);

Nos damos cuenta que System.out.println es una orden nueva con esta orden mandamos a imprimir una cadena en la pantalla, se usa de la siguiente forma se escribe System.out.println luego se habrá un paréntesis y se abre unas comillas dobles, después se escribe lo que queremos que salga, si queremos dar un espacio necesitamos darle un espacio antes de cerrar las comillas, luego se pone el signo + seguido del nombre del campo que imprimiremos luego nuevamente se escribe + y a continuación se vuelve abrir unas comillas y se escribe su año de nacimiento es, se vuelve a cerrar las comillas y luego se pone nuevamente el signo más seguido del campo ano_nacimiento al finalizar cerramos el paréntesis y escribimos punto y como
Y queda de la siguiente manera

System.out.println("El nombre de la persona es " + nombre + " y su año de nacimiento es " + ano_nacimiento);

Al imprimirlo en la pantalla, saldrá algo asi:
El nombre de la persona es Daniel y su año de nacimiento es 1992

Luego se cierra la llave y termina el método

Se debe notar que acá una vez más hicimos uso del polimorfismo ya que el + funciona para concatenar una cadena (hacer una cadena nueva a partir de otras datos o cadenas) y también puede puede funcionar como signo de suma
Luego escribimos una nueva signatura de un método esta, nueva signatura llevara un parámetro, y queda de la siguiente manera

public void Cambiar_ano_nacimiento(int anna)
{
ano_nacimiento=anna;
}

Este nuevo método pide un parámetro de tipo entero (int) y dicho parámetro se llama anna (año de nacimiento) es importante destacar que el nombre del parámetro puede ser cualquiera
Luego abrimos la llave y escribimos una nueva sentencia para modificar el campo ano_nacimietno con el parámetro anna, con esto le daremos un nuevo valor al campo ano_nacimeinto
Con esto pasamos el valor de un parámetro a un campo, tenemos que hacer esto ya que el parámetro desparecerá al salir del método y si deseamos seguir usándolo el valor del parámetro necesitamos pasarlo a un campo, ya que el campo vivirá todo el tiempo que viva una clase.
Al terminar la sentencia se escribe punto y coma y luego se cierra la llave.

En el método Cambiar_nombre básicamente asemos lo mismo, con la única diferencia que el parámetro ahora será de tipo String (cadena) y solo puede usarse en campo de tipo String

Los dos métodos son métodos de modificación ya que modifican el valor de un campo, además que ambos no presentan retorno.
Luego se cierra la llave del método y por último se cierra la llave de la clase. El código completo queda de la siguiente manera



Ejercicio

Copie la clase anteriormente mostrada y luego cierre el editor, regrese a la pantalla principal de bluej y cree un objeto de la clase Persona, para crear un objeto dele clic derecho a la clase persona y dele clic en new persona, ahora en la parte de abajo (banco de objetos) vera el objeto creado, dele clic derecho al objeto y mande a llamar a todas los métodos creado, observe como trabaja cada método del objeto

Acá se puede apreciar que la clase persona ya ha sido creada

Acá se puede apreciar que ya se ha creado un objeto de nombre persona1: y que pertenece a la clase Persona

Nota cuando mande a llamar el método cambiar nombre al escribir el nombre escriba el nombre entre comillas ejemplo “Daniel” y no Daniel

Ejercicio
Ahora escriba su propia clase, use el nombre que quiera para los campos y métodos

Ejercicio
Cree una nueva clase, pero modifique el constructor para que el año de nacimiento empieza con su año de nacimiento y en nombre empiece con su nombre, ahora necesitara meter dos parámetros en el constructor deberea separarlos por una coma, la signatura seria la siguiente, no olvide pasar los parámetros al los campos
public Persona(int an, String note)
El nuevo contructor debe de quedar muy similar a este

public Persona(int an, String note)
{
ano_nacimiento=an;
nombre=note;
}


Con estos ejercicios vimos, que es un método, como se declara, como se pasa un parámetro a un campo, que es un constructor, como se usa y como se declara, y que es el retorno y como se usa, mas adelante vernos el resto de los temas

(21 de Octubre de 2011) Bueno Hoy nos quedamos hasta acá, mañana seguiré poniendo información nueva, si les gusta o  les parece interesante, o incluso si creen que se debe corregir algo manden sus opiniones, después de todo yo igual soy un alumno que está en el proceso de aprendizaje

Estudiante de ISC Daniel ZVPL

miércoles, 19 de octubre de 2011

Declaración de clase: atributos, métodos, encapsulamiento


A partir de este momento, empezaremos a trabajar con el código en Java. Para esto primero habrá el bluej que previamente descargo en el link de la entrada “Palabras del autor”
Si no de todas maneras les vuelvo a dejar el link aca
http://www.megaupload.com/?d=LF9O9XXW

Al abrir el bluej debe ver una ventana muy similar a la siguiente, dele clic en proyect (proyecto), después dele clic en New Proyect (Nuevo proyecto) y elija un directorio donde se guardara el proyecto y a continuación y póngale un nombre, ejemplo “BJ1”

Ventana principal deBluej



Ahora vera que los botones New Class, Compile, y las diferentes flechas quedan habilitadas (de no ser así regrese un paso atrás), ahora también aparecerá en el espacio en blanco un dibujo de un bloc de notas en la parte superior izquierda. Si le da doble clic a él podrá empezar a escribir en él una descripción de sistema que hará

Si lo desea puede omitir la parte de poner una descripción del sistema ya que esto no es necesario para el sistema.

A continuación dele clic en New Class, le aparecerá un cuadro que le pedirá el nombre de la clase y el tipo, póngale el nombre de “asdf” (sin comillas) y seleccione el tipo class


Muy bien hemos creado nuestra primera clase en Java :), si nos damos cuenta se asemeja mucho al diagrama de clases que vimos en la primera parte, de ahí su importancia de entender lo más posible lo primero.

Muy bien ahora si le damos clic derecho a la clase “asdf” y de ahí selecciona Open editor nos llevara al código fuente de la clase, lo mismo pasa si le damos doble clic.

En este momento estaremos viendo el código fuente de la clase, si nos damos cuenta veremos que para declarar una clase en Java se usa la siguiente sintaxis:



public class asdf
{
}




Después de poner public class asdf Debe ir su la llave que abre la clase, la llave se cerrara cuando la clase termine, obviamente como esta clase no tiene nada más se procede a cerrarla (Imaginar que el resto del código no existe), recuerda que cada llave que abres debes cerrarla, si recuerdas esto podrás ahorrarte muchos dolores de cabeza, yo he sufrido por culpa de eso.

Muy bien ahora seleccione todo el código y bórrelo, después de borrar escriba la siguiente declaración de clase

public class MiClase
{
}



 
Proceda a darle clic al botón compile y cierre el editor del código fuente, y regrese a la pantalla principal del bluej, ¿Qué cambio importante puede notar?
Lo que paso es que la clase antes llamada “asdf” ahora se llama MiClase esto se debe a que desde la declaración de la clase la llamamos así.

Yo recomiendo borrar todo el código de una clase cuando sea creada para que así podamos practicar más.


IMPORTANTE

1.- Recuerda que al escribir el nombre de una clase siempre se empieza con mayúscula, y en caso que el nombre de la clase se igual o mayor a dos palabras se juntan las palabras siempre y cuando la siguiente palabra empiece con mayúscula ejemplo “MiClase”, o también puede escribir “Mi_clase”

Estas reglas no son de gran importancia ya que si se escribe “miclase” igual lo compila y trabaja. Solamente que lo anterior son una especie de convenio que los programadores han marcado para que sea más fácil entender el código, en especial cuando en un proyecto trabaja más de una persona.

2.- No pueden existir dos clases con el mismo nombre. Intente hacer otra clase con el mismo nombre y deberá marcarle un error (De no ser así revise porque, debe marcar error). Acá si no es convenio, si nos reglas que se deben seguir al pie de la letra.

3.- Al principio escribamos “public” esto lo explicaremos más tarde, mientras escriba así

Muy bien ahora cree varias clases, ejemplo Perro, Carro, Persona, etc. de preferencia hágalo como lo mostré en la parte de arriba, borre todo el código y escriba desde cero todo. Esto nos servirá para empezar a familiarizarnos con Java

Varias Clases creadas




Atributos

En este punto ya explicamos que es una clase y como se declara en Java , ahora pasare a explicar que son los atributos en una clase en java, para eso usaremos la clase “Carro” que hemos creado anteriormente, de no ser así créela, total ya sabe cómo crear una clase

** Una clase es una especia de molde para los objetos, define los atributos y los métodos de una serie de objetos.

Muy bien habrá el código fuente de la clase Carro y después escriba después de la llave lo siguiente:
private int modelo_carro;
private String nombre;
private int num_puertas;

El código completo debe quedar de la siguiente manera

public class Carro
{
private int modelo_carro;
private String nombre;
private int num_puertas;
}
Lo que hemos hecho es declarar los campos de una clase o también conocidos como los atributos, debemos recordar que los atributos son las características de un objeto, hablamos de características de un objeto y no de clases ya que debemos recordar que la clase solo es un molde con el que se crearan los objetos.




Muy bien ahora expliquemos lo que acabamos de escribir.
1.- Para declarar un campo en Java primero se escribe  primero si es privado o publica, escribiremos privada por que queremos que solo en esa clase se puedean usar esos campo, luego se escribe el tipo de dato, debemos de recordar que en Java solo existen dos tipo de datos (Primitivos y tipo Objeto), por lo pronto solo usaremos los primitivos. Los datos primitivos son aquellos que se guardan los datos directamente en la variable, ejemplo de datos primitivos:
int (valores entero)
float(números con decimales)
String (cadena de caracteres)
boolean (valor boleano con dos posibles respuestas)
etc.

(Puede investigar en internet el resto de tipo de datos primitivos, pero por lo pronto con los mostrados anteriormente trabajaremos)

2.-Se procede a escribir el nombre de la variable (acá se manejan los mismo acuerdos para poner nombre que en las clases)

3.- después del nombre se escribe un punto y coma; de no hacerlo al compilar nos marcara un error

Ahora declare más campos, con el fin de practicar la declaración de campos (ATRIBUTOS)

NOTA
1.- Puede darle un espacio después de cada llave con el fin de que el código sea más estético y sea más entendible (ver imagen)

2.- La declaración de campos no va adentro de ninguna llave si no afuera de la clase (ver imagen)

Métodos

Los métodos son las acciones que tomara el objeto de la clase, y este puede pedir un parámetro o no para funcionar.
Parámetro: información extra que necesita el método para trabajar

Ejemplo:
Imaginemos la clase perro, esta tiene el método llamado saber tamaño, pero también necesita saber cuántas veces va a ladrar (parámetro). Nos damos veces que él la cantidad de veces que va a ladrar es un parámetro, ya que es información extra que se necesita saber, y por lo tanto se necesita saber

La sintaxis para declarar un método con un parametro es la siguiente

Public void ladrar(int can_ladrar)
{
}

En el que caso que no se necesite saber el parámetro se escribe de la siguiente forma
Public void ladarar()
{
}

Obviamente abrimos y cerramos la llave por qué no tenía ninguna sentencia el método. Un método puede ser de dos formas de tipo return o de tipo void, el tipo return regresa un valor (un tipo de valor), mientras que void no regresa nada, en los siguiente temas vernos más de esto.

 
También es importante mencionar que existen dos tipos de métodos, de modificación y de acceso. Los de modificación como su nombre lo dicen modifican el estado de una variable, mientras que lo de acceso nos permiten el acceso a una variable (leer la variable)

NOTA:
No trata de programar el ejercicio anterior ya que no funcionara, programaremos ejercicios con métodos cuando veamos los constructores ya que estos van muy ligados a los métodos. De igual manera si no quedo muy claro el concepto no se preocupe, con que entiende que le método es solamente las acciones que tomara la clase es suficiente por el momento.

Por el momento solo haga Signaturas de los métodos, un momento ¿qué es una signatura de un método? La signatura del método es como el esqueleto o firma de un método
Ejemplo

publicStringt Mostrar_nombre()

Public void Impimir_detalles()

Intente hacer varias Signatura de métodos, en caso de que no quede muy claro no se preocupe, lo explicaremos más adelante.


Encapsulamiento

El encapsulamiento es el ocultamiento del estado, es decir, del dato miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.
Podemos decir que encapsular es nada más que ocultar o esconder a un objeto o a sus atributos con el fin de que este no sea modificado por accidente, pues solo ciertos métodos podrán modificarlo o tener acceso a ese objeto
A continuación mostraremos una parte de un código, y en base a eso explicaremos cómo funciona el encapsulamiento

public void Insertar_dinero(int aumento)
{
if(aumento>0)
{
saldo=saldo+aumento;
}
else
{
System.out.println(+ aumento + " No es un valor permitido, por favor ingrese un valor positivo");
}
}

Acá podemos observar que el método insertar dinero presenta un parámetro de tipo entero (int) y de nombre aumento, el aumento solo podrá ser modificada por este método y la variable solo podrá ser accesible en este método y no durante otro método
El encapsulamiento quedara más claro conforme el lector vaya haciendo los ejercicios ya que es más fácil aprenderlo con la práctica

(20 de Octubre de 2011) Bueno Hoy nos quedamos hasta acá, mañana seguiré poniendo información nueva, si les gusta o parece interesante, o incluso si creen que se debe corregir algo manden sus opiniones, después de todo yo igual soy un alumno que está en el proceso de aprendizaje

Estudiante de ISC Daniel ZVPL
 

martes, 18 de octubre de 2011

Elementos del Modelo de Objetos/UML Diagrama de Clases



El primer tema a abordar será los elementos básicos del UML (Unified Modeling Language) o mejor conocido en español como lenguaje de modelaje universal
También acá abordaremos los temas de clases, objetos, abstracción, modularidad, encapsulamiento, herencia y polimorfismo.

¿Pero que es el UML?
Es un lenguaje que permite modelar, construir y documentar los elementos que forman un producto de software que responde a un enfoque orientado a objetos. Este lenguaje fue creado por un grupo de estudiosos de la Ingeniería de Software formado por: Ivar Jacobson, Grady Booch y James Rumbaugh en el año 1995. Desde entonces, se ha convertido en el estándar internacional para definir organizar y visualizar los elementos que configuran la arquitectura de una aplicación orientada a objetos.


El UML posee una las siguientes características:
1. Ser tan simple como sea posible, pero manteniendo la capacidad de modelar todas las operaciones del sistema que se necesita construir.
2. Debe ser un lenguaje universal, como cualquier lenguaje de propósito general. Esto sirve para que cualquier persona pueda fácilmente trabajar un proyecto sin necesidad de haber estado colaborando en el antes
4. Imponer un estándar mundial.
UML no es un lenguaje de programación sino un lenguaje de modelaje, jamás podremos decir que programamos en UML, pero si podemos diseñar nuestros sistemas con él para así al momento de escribir el código esto se mas fácil además de haber creado una herramienta potente.
En el UML toda la documentación de u n proyecto se divide en diagramas que representan las diferentes vistas del proyecto. Estos diagramas juntos son los que representa la arquitectura del proyecto.
Existen dos grandes tipos de clasificación los diagramas dinámicos y los diagramas estáticos. Los diagramas dinámicos muestran como el sistema actuara cuando este se encuentre corriendo, mientras que el estático muestra cómo trabaja el sistema aunque no esté corriendo en ese momento.

A continuación mostraremos la lista de los diferentes tipos de diagramas:
Vista casos de uso
Vista de diseño
Vista de procesos:
Vista de implementación:
Diagrama de objetos
Diagrama de Clases
Entre otros.


Es muy posible que al diseñar un programa este requiera más de un tipo de diagrama según la complejidad de este, pero para iniciar será suficiente con que entendamos solo por el momento el Diagrama de objetos y el diagrama de Clases.


Antes de seguir avanzando veremos algunos conceptos claves para el Paradigma orientado a objetos que nos servirán tanto en el diseño del UML como al programar.


Abstracción: Es la habilidad que tiene el diseñador o programador de ignorar los detalles.
¿Cómo? ¿Olvidar los detalles? ¿Está bien eso?


Cuando hablamos de olvidar los detalles no nos referimos a que aremos un UML o un Software de mala calidad, sino todo lo contrario, al ignorar detalles que en su momento no nos interesan podemos conseguir un mejor resultado, ya que no saturamos un sola cosa


Lo demostraremos con un ejemplo sencillo
Un vendedor de mostrador se dedica a vender zapatos, el se dedica únicamente a vender zapatos, a el no le interesa si el camión hizo el correspondiente envió, o si la fabrica hizo a tiempo los zapatos, o si el que vende la materia prima le vendió a tiempo la materia a la fabrica. El solo se dedica a vender.
Con esto podemos decir que el vendedor no se llena de responsabilidades, pues el solo cumple la suya de vender. Ignoro los detalles, pero claro cada quien debe responsabilizarse por su tara; así mismo el de la empresa repartidora se preocupa por mandar a tiempo el paquete, la fabrica por hacer los productos, y el vendedor de la materia prima, de tener la materia a sus disposición.


Cuando traduzcamos esto a código vernos que no servirá mucho ya que a darle a cada clase una tarea específica es más estable el sistema además de que se puede reciclar con facilidad el código


Modularidad: Es la acción de poder dividir un proceso en otras tareas para así poder realizarlas con facilidad
¿Se parece mucho al anterior no?
Pero no, de hecho al diseñar un sistemas aremos uso de ambas con una vernos que módulos podemos separar, y con la otra vernos que detalles se pueden ignorar en su momento.


Encapsulamiento: Ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.


Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.


Esto nos sirve para poder tener más seguro nuestros datos para así evitar una posible modificación accidental, pues hablando de código solo una clases podrá acedar a las variables que estén dentro de ellas pero no otra clase.


Un ejemplo seria: Imaginemos que la familia juanita sabe un secreto, solo ellos podrán saber el secreto, más no otra familia.


Si en este momento no quedo muy claro este concepto, no se preocupe quedara más claro al momento que estemos programando.


Herencia: Capacidad que tiene los objetos para heredar todas o algunas de sus características (datos) y comportamiento (procedimientos) a sus descendientes o herederos, permitiendo así la reutilización de código lo que en la práctica se traduce en una herramienta muy potente de programación.


En un ejemplo muy sencillo es que ejemplo, tu papá te heredo el color de tus ojos.


Polimorfismo: Se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.


Ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).


Una vez más si no quedo claro no se preocupe estos conceptos quedaran más claro al programar, por el momento está bien con lo que haya entendido

Diagrama de Objetos

Es un diagrama que da una muestra el sistema de manera dinámica, ósea cuando este está trabajando, este diagrama nos ofrece una mirada de cómo trabajara el sistema cuando este se esté implementando.
Muestran instancias objetos en un momento particular del sistema. Los diagramas de objetos no muestran la multiplicidad ni los roles, aunque su notación es similar a los diagramas de clase.

 


Diagrama de Clases

Este diagrama a diferencia del diagrama de Objetos nos muestra una vista del sistema en una forma estática, ósea que nos muestra como está el sistema cuando este no esta corriendo.
En el diagrama será donde definiremos las características de cada una de las clases, interfaces, colaboraciones y relaciones de dependencia y generalización. Es decir, es donde daremos rienda suelta a nuestros conocimientos de diseño orientado a objetos, definiendo las clases e implementando las ya típicas relaciones de herencia y agregación.
En el diagrama de clases debemos definir a estas y a sus relaciones.


En este momento saber que es una clase,  la clase define los atributos y los métodos de una serie de objetos. Todos los objetos de esta clase (instancias de esa clase) tienen el mismo comportamiento y el mismo conjunto de atributos (cada objetos tiene el suyo propio). En ocasiones se utiliza el término «tipo» en lugar de clase, pero recuerde que no son lo mismo, y que el término tipo tiene un significado más general.

En palabras más simples podemos decir que una clase es como una especie de molde para los objetos.
Mientras que un objeto no es nada más que un objeto, ósea reprenda algo de la vida real.

Ejemplo
Imaginemos la Clase Auto esta posee varias características (atributos) como el numero de llantas, el tipo de auto, puertas, color, etc. El Objeto “Auto_mio” lo podemos considerar como un objeto de la clase auto, este objeto tiene 4 puertas, es rojo, y es de tipo sedan, y así se pueden construir mas objetos en base a una clase, pues como dije la clase es como el molde 

Para representar una clase en UML usaremos un rectángulo que dispone de tres apartados, el primero para indicar el nombre, el segundo para los atributos y el tercero para los métodos (acciones que realizara).
 
 
En la parte de arriba Lleva el nombre de la clase(Cuenta), en la parte de en medio los atributos(balance), y en la ultima parte los métodos(depositar (monyo :int): void),
  
En esta clase se pudo apreciar que una clase lleva los tres elementos básicos, en la parte dos no es necesario marcar el tipo de dato con el que trabajara

Atributos
Los atributos (características) se muestran al menos con su nombre, y también pueden mostrar su tipo, valor inicial y otras propiedades. Los atributos también pueden ser mostrados visualmente: 

+ Indica atributos públicos
# Indica atributos protegidos 
- Indica atributos privados

Métodos
Los métodos (acciones) también se muestran al menos con su nombre, y pueden mostrar sus parámetros y valores de retorno. Las operaciones, al igual que los atributos, se pueden mostrar visualmente:
  • + Indica operaciones públicas
  • # Indica operaciones protegidas
  • - Indica operaciones privadas
Los métodos los podemos definir como las acciones que hará como sumar, restar, mostrar total, dar cambio, etc. Podemos decir que es el verbo.

Asociaciones de clase
Las clases se puede relaciones (estar asociadas) con otras de diferentes maneras:
Generalización
La herencia es uno de los conceptos fundamentales de la programación orientada a objetos, en la que una clase «recoge» todos los atributos y operaciones de la clase de la que es heredera, y puede alterar/modificar algunos de ellos, así como añadir más atributos y operaciones propias.
En UML, una asociación de generalización entre dos clases, coloca a estas en una jerarquía que representa el concepto de herencia de una clase derivada de la clase base. En UML, las generalizaciones se representan por medio de una línea que conecta las dos clases, con una flecha en el lado de la clase base.
Asociaciones
Una asociación representa una relación entre clases, y aporta la semántica común y la estructura de muchos tipos de «conexiones» entre objetos.
Las asociaciones son los mecanismos que permite a los objetos comunicarse entre sí. Describe la conexión entre diferentes clases (la conexión entre los objetos reales se denomina conexión de objetos o enlace).
Se representa mediante una línea continua, que une las dos clases
Las asociaciones pueden tener un papel que especifica el propósito de la asociación y pueden ser unidireccionales o bidireccionales (indicando si los dos objetos participantes en la relación pueden intercambiar mensajes entre sí, o es únicamente uno de ellos el que recibe información del otro). Cada extremo de la asociación también tiene un valor de multiplicidad, que indica cuántos objetos de ese lado de la asociación están relacionados con un objeto del extremo contrario.
En UML, las asociaciones se representan por medio de líneas que conectan las clases participantes en la relación, y también pueden mostrar el papel y la multiplicidad de cada uno de los participantes
Las asaciones es básicamente como una clase trabaja con otra pues en el paradigma orientado a objetos es muy importante tener en cuenta que una clase puede trabajar con otra clase, es la forma en que se pueden comunicar

IMPORTANTE

1.- Cada clase debe tener un nombre único, que las diferencie de las otras.
2.- La primera letra de la clase debe de empezar con mayúscula.
3.- La primera letra del objeto es minúscula.
4.- Cuando el nombre del objeto o clase es mayor a una palabra se pueden juntar solo si la letra de la siguiente palabra empieza con mayúscula ejemplo: miCasa (objeto) MiCasa(Clase)
O igual se pude separar con guiones bajos mi_casa
5.-Para marcar que un objeto pertenece a una clase se escribe la primera palaba que sera el nombre del objeto mientras que la palabra de abajo es a la clase a la  que pertenece(figura 1.0)
Figura 1.0
6.-Los nombres no pueden llevar coma, ni ningún carácter especial.






Diferencia entre Diagrama de Clases y Diagrama de Objetos

 

El de la izquierda se pude ver que es un diagrama de objetos y se puede identificar fácilmente que “miVisor” es un objeto que pertenece a VisorDeReloj
Por el momento ignoremos los dos campos de horas y minutos, esos los podremos explicar más detalladamente al momento que vemos código.
En el diagrama de la derecha se aprecia con facilidad que es un diagrama de Clase se puede apreciar a primera vista las “Asociasones de clases” pues la clase VisorDeReloj trabaja con objetos de la clase VisorDeNumeros

Acá se puede apreciar de manera muy fácil su diferencia entre cada diagrama pues el diagrama de objetos nos muestra la vista dinámica, ósea cuando nuestro sistema está corriendo. Mientras que el Diagrama de Clases nos muestra la vista Estática, Ósea cuando nuestro sistema está parado.
 Algo muy importante es que ambos son necesarios para un buen diseño de un Software, ya que cada uno muestra una vista diferente del sistema

Ejemplo
A continuación se mostrara un ejemplo de diagrama de Clases.
Nos enfocaremos en diagramas de clases ya que nos serán de gran utilidad al pasar al bluej

Acá podemos apreciar como todo lo anterior se aplica


Hasta este momento vimos dos Diagramas muy importantes, estos dos tipos de diagramas nos ayudaran a empezar a modelar nuestros pequeños sistemas. Para que así podamos ver cómo trabajan. En un futuro el lector e incluso el autor se meterán a investigar el resto de tipos de diagramas, pero por el momento bastara con estos dos.

Hay que tener muy en cuenta que el UML no es un lenguaje de programación, jamás podremos decir que uno programa en UML. Entonces uno se pregunta ¿Para qué carajo me sirve el UML si no puedo programar en él?
La respuesta es muy sencilla, pues como su nombre lo dice es un Lenguaje de Modelaje esto quiere decir que nos ayuda a diseñar nuestra pieza de Software, pues al tenerlo documentado será más fácil hacerle futuras modificaciones, e incluso que otras personas que jamás han participado en el proyecto puedan fácilmente adherirse a él.

A continuación mostraremos el código en C++ para saber qué tipo de triangulo es a partir de haber ingresado los 3 lados de el


#include<stdio.h>

#include<conio.h>

float l1,l2,l3;



main()

{

printf("Hola, ingrese los tres lados del triangulo para poder determinar si es un triangulo isoceles,equilatero o escaleno\n");

scanf("%f %f %f", &l1,&l2,&l3);

if(l1==l2 && l2==l3)

{

printf("El triangulo es equilatero\n");

}

if(l1==l2 && l3!=l2 || l1==l3 && l2!=l1 || l2==l3 && l1!=l3)

{

printf("El triangulo es isoceles\n");

}

if(l1!=l2 && l1!=l3 && l2!=l3 && l2!=l1 && l3!=l1 && l3!=l2)

{

printf("El triangulo es escaleno");

}

getch();

}
 


Este ejemplo que es bastante sencillo uno pensaría que no es necesario hacer uso de los diagramas de UML, tal vez para este programa no sea necesario pues no nos llevara más de 50 líneas de código hacerlo , y fácilmente podemos modificarlo, o otra persona puede trabajar en el fácilmente.

Pero ahora piense que usted trabaja en con un equipo de desarrolladores y le tienen como trabajo desarrollar un videojuego, ¿Usted cree que el juego le llevaría 100 o incluso 200 líneas?
Pues no, en este casos estaríamos hablando de miles de líneas de código, entonces nos damos cuenta que para poder desarrollar este proyecto necesitaremos una especie de mapa que nos ayude a saber donde se encuentra cada parte del juego y como interactúa cada objeto con otro, ahí radica la importancia del UML, el UML será nuestro mapa del proyecto y nos guiara en todo momento, además de que será más fácil modificar el sistema en un futuro.
Si nos ponemos a analizar cualquier sistema moderno que cumpla con estándares de calidad actual se apoyara en el UML, desde juegos, programas administrativos, de manipulación de gráficos e incluso el sistema operativo de una computadora.

Se debe recordar que un programa no es nada más que un seria de líneas de código que son traducidas por un compilador a 0 y 1, que es el lenguaje de las maquinas ,y debemos tener nuestro “mapa” para así no perdernos en el mar de código que desarrollemos.

En este momento el lector habta que haber comprendido lo elemental del diagrama de clases y su importancia al desarrollar software. Con esto finalicemos la primera parte, en la parte que sige empezaremos a adentrarno en el codgigo de un programa en Java, si el lector no le quedo claro algo le recomiendo volver a leerlo o escribir sus dudadas.

Estudiante de ISC Daniel ZVPL