lunes, 14 de enero de 2008

por que usar metodos GET y SET???

Como hemos visto en clase, parece ser que lo mas conveniente es que los atributos de una clase esten definidos como private y los metodos esten definidos como public... Pero por que?

veamos el desarrollo de un ejemplo desde dos puntos de vista distintos:

1.- usando una clase ya definida


bien, supongamos que, entre las clases que ofrece java, tenemos una que se llama fraccion (que ocurrente, verdad?). No sabemos que hace por dentro, pero de una cosa estamos seguros: tiene tres metodos:

int getDenominador(): no sabemos que hace, pero nos devuelve un int
void setDenominador(int valor): no sabemos lo que hace
void mostrar(): nos muestra en la pantalla algo parecido a esto: "X / Y = Z"

bueno, pues en nuestro programa, en un momento determinado, ponemos:

Fraccion primera = new Fraccion();
primera.setDenominador(10);
primera.mostrar();

y al ejecutar nuestro programa, aparece:
"20 / 10 = 2"

vamos a intentar "estropear" la clase fraccion... hacemos lo siguiente:

Fraccion primera = new Fraccion();
primera.setDenominador(0);
primera.mostrar();

y al ejecutar nuestro programa...

ArithmeticException...

hemos averiguado algo: el metodo setDenominador() nos deja meter un valor 0. Esto es porque en el metodo SET no comprobamos el valor introducido.

Una utilidad muy importante es, por tanto, utilizar metodos SET para asignar valores.

2.-definiendo nosotros la clase


una forma de definir el metodo setDenominador:

public void setDenominador(int valor){
this.denominador = 1;
if(valor!=0)
this.denominador=valor;
}

Una forma de definir el metodo getDenominador:

public int getDenominador(){
if(this.denominador !=0)
return this.denominador;
else
return 1;
}


y por ultimo, la definicion del metodo mostrar:

public void mostrar(){
System.out.println(this.numerador + " / "+ this.denominador + "= ");
System.out.println(this.numerador/this.denominador);
}


bien. Supongamos que hemos definido el atributo denominador como public. Si algun listillo hace:

Fraccion primera = new Fraccion();
primera.denominador = 0;
primera.mostrar();

la segunda linea del metodo mostrar() va a hacer una division entre 0!!! y nos da la excepcion de division entre 0.

COMO MEJORAR el metodo mostrar()


de la siguiente manera:

public void mostrar(){
System.out.println(this.getNumerador() + " / "+ this.getDenominador() + "= ");
System.out.println(this.getNumerador()/this.getDenominador());
}

o lo que es lo mismo, la comprobacion del get y del Set la utilizamos nosotros mismos y "cubrimos" un problema de posible mala asignacion.

martes, 8 de enero de 2008

VUELTA AL COLE!!! (digooooo... al curso :D )

HOLA DE NUEVO!!!

volvemos a las andanzas, una vez mas, llenos de ilusion, cariño, amor, amistad, wii, nds... (bueno, los dos ultimos, seguro que solo aquellos felices afortunados...:D )

Espero que este año aprendamos todos un poco mas... Y QUE ESTO SE MUEVA!!!

venga un abrazo a todos... NOS VEMOS!!!

domingo, 23 de diciembre de 2007

programar en C para la NintendoDS!!!

hola a todos!!!

bueno, hago este post porque, a raiz del tema de la Nds que nos mostro Sandra (muchas gracias ;)) y ahora que ya tengo el cartucho con la microSD de 2 Gb, me he puesto a mirar historias del tema de la consola esta...

y entre los temas he encontrado este "curioso":

Tutorial de C++ para Nds

esto es parte del tutorial que esta haciendo uno (que parece que se aburre como yo) y que esta programando en C++ para esta consola. Hasta hace el codigo fuente del HOLA MUNDO!!!

Un motivo mas para pensar en aprender este lenguaje de programacion (en compiladores NO Windows) :D

asi que ya sabeis: si quereis hacer una calculadora, o ver si un numero es primo o no... una consola y un poco de C y problema solucionado!!! :)

martes, 18 de diciembre de 2007

Fotos Cena "2"

Sandra, ayer intente acceder a tu espacio, y me dice que no tengo permiso.
Yo también he colgado las fotos en mi Web, en la sección galería de fotos/cena curso 07.

Salu2.

lunes, 17 de diciembre de 2007

Fotos Cena

Como esto es un poco lento para subir imágenes os dejo la dirección de mi blog para poder ver las fotos:

campurriana.spaces.live.com

viernes, 14 de diciembre de 2007

Sobre el tema de la conexion a Internet de Telefonica . . .

Las mas antiguas y las mas fiables, son de ya.com pero valen porque son servidores de Telefonica:

194.179.1.100
194.179.1.101

Otras menos saturadas son:

80.58.61.250
80.58.61.254

Aconsejo las primeras.

Despues hay un problema de conexiones simultaneas que puede manejar el protocolo TCP/IP de Windows SP2, que se limitan a 10. El anterior SP1 dejaba hasta mas de 1.000. Por eso dan problemas las conexiones a internet, sobre todo si tenemos un P2P ejecutando.

Para modificar este parametro, por ejemplo a 1.000 hay que bajar este pequeño programa de:

http://home.comcast.net/~optimizexp/Files/EvID4226Patch223d-en.zip

Un saludo.

jueves, 13 de diciembre de 2007

Concatenando cadenas en C...

Voy a plantearos una solucion al problema de concatenar cadenas. Si bien tenemos una funcion que nos lo hace, podemos hacer "inventos" con funciones parecidas a las que ya conocemos.

En este caso, voy a introducir el uso del "procedimiento" sprintf() ("procedimiento" porque en C, tanto el procedimiento como la funcion devuelven al menos un valor)

sprintf funciona como nuestra conocida printf, con la unica diferencia que, antes de la cadena patron indicamos el nombre de una variable de tipo cadena. El resultado es que, en dicha variable, se graba una cadena con el formato indicado y con los valores indicados tambien. En esencia, es como si el resultado de printf lo guardaramos en la variable, en lugar de presentarlo en pantalla.

Veamos un ejemplo de como concatenar cadenas:


#include <stdio.h>
int main(){
char cadena[4]="hola";

printf("cadena inicial: %s\n", cadena);

// concatenamos...
sprintf(cadena, "%s%s", cadena, cadena);

printf("cadena concatenada: %s\n", cadena);

}
Probadlo, el resultado es interesante... Ahora bien, no aseguro su funcionamiento en el compilador DevC++ (es una verdadera castaña, por no decir palabras mayores...)