Mostrar Mensajes

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Jibarito

Pages: [1] 2
1
Java JSE / Uso del patrón factoría
« on: Agosto 13, 2013, 06:18:32 pm »
Buenos días,

no he visto ningún subforo dedicado a patrones de diseño, así que planteo aquí mi duda, ya que es con Java con lo que ando liado.

Tengo una duda sobre por qué es conveniente usar el patrón "factory". lo voy a explicar con un ejemplo:

Si he entendido bien el patrón, para instanciar un objeto de Clase "MiClaseAImplementaMiInterfaz" y estar abierto a que el día de mañana pueda cambiarlo por "MiClaseBImplementaMiInterfaz", debo crear más o menos lo que sigue:

- public interface MiInterfaz{...}
- public MiClaseAImplementaMiInterfaz implements MiInterfaz{...}

- public interface InterfazFactory{  //O bien una clase abtracta...
        public MiInterfaz nuevoObjeto();
}
- public FactoryA implements InterfazFactory{
        public MiInterfaz nuevoObjeto(){
                return new MiClaseAImplementaMiInterfaz();
        }
  }

Y finalmente para crear los objetos:

//Instanciar la factoría concreta:
InterfazFactory miFactoria = new FactoryA();

// Declarar e instanciar el objeto:
MiInterfaz miObjeto = miFactoria.nuevoObjeto();


Cuando quiera cambiarlo y usar un objeto de la clase "MiClaseBImplementaMiInterfaz" tendría que crear:

-public FactoryB implements InterfazFactory
    public MiInterfaz nuevoObjeto(){
        return new MiClaseBImplementaMiInterfaz();
    }
  }

Y cambiar donde decía:
//Instanciar la factoría concreta:
InterfazFactory miFactoria = new FactoryA();

por:
//Instanciar la factoría concreta:
InterfazFactory miFactoria = new FactoryB();

Mi duda ahora es la siguiente:
¿por qué no prescindir de la factoría y escribir directamente:

MiInterfaz miObjeto = new MiClaseAImplementaMiInterfaz();

y cambiarlo cuando haga falta por:

MiInterfaz MiObjeto = new MiClaseBImplementaMiInterfaz();

?
Sigue habiendo que cambiar un sólo renglón. ¿Qué aporta el uso de la factoría? ¿He entendido mal el patrón?

muchas gracias de antemano por la respuesta.

Saludos,

2
PHP / Depurador PHP
« on: Mayo 11, 2012, 04:10:59 am »
Muy buenas a todos, estoy buscando opciones para depurar código PHP.

He visto que existen algunas extensiones para PHP que permiten opciones de debugging, como: DBG, APD o Xdebug, pero no tengo ni idea de cual es más cómodo de usar ni de qué funcionalidades incorporan.

¿Alguien podría aconsejarme alguno (no necesariamente de esos tres)? Necesito orientación antes de empezar.

Muchas gracias de antemano.

Saludos!

3
Muy buenas,

estoy empezando a trabajar con un pequeño equipo de programadores y estamos pensando en formas de estimar el tiempo que nos va a requerir cada tarea. Los objetivos de estimar esos tiempos son varios, como poder planificarnos y dar fechas de entregas (aunque sean sólo aproximadas), estimar los "costes de programación" antes de emprender la tarea o priorizar las tareas pendientes...

¿Alguien conoce algún método/herramienta/bibliografía que me pueda orientar en este tema?

Muchas gracias de antemano.

4
Javascript / Forzar racarga de archivos .js
« on: Diciembre 04, 2011, 06:36:39 am »
buenas a todos.

estoy desarroyando en Javascript desde Eclipse. Me he dado cuenta de que a veces tras cambiar un script y revargar la página, los cambios no sruten efecto. Al consultar el código fuente desde el explorador compruebo que la versión del .js no se ha actualizado, sigue usando la que tiene en la caché.

¿Cómo puedo hacer para forzar la descarga de los .js y comprobar el funcionamiento de la nueva versión??

muchas gracias de antemano por vuestra ayuda.

5
Cursos y herramientas / Para empezar con AJAX
« on: Abril 24, 2011, 09:58:58 pm »
La web "LibrosWeb.es" tiene muchos libros online gratuítos sobre programación.

Yo he llegado a ella buscando info sobre las tecnologías AJAX y me ha encantado el libro online que tienen al respecto.

Para empezar he aprendido mucho sobre JavaScript (el JSON!!) del que conocía sólo la superficie.

Os lo recomiendo a todos los que estéis empezando:

http://www.librosweb.es/ajax/

Que la fuerza os acelere.

6
Javascript / Modalidades de rollover
« on: Octubre 02, 2010, 12:18:18 am »
Hola a todos.

Me he estado documentando sobre cómo hacer un rollover. En el localhost sale bien sin precargar las imágenes, pero según dicen hay que precargarlas para que funcione rápido cuando se usa en internet (aún no he tenido ocasión para probarlo en la red. No tengo aún el dominio). Así que he estado viendo cómo implementar la precarga.

Mi duda es: ¿da lo mismo cargar las imágenes en un array de imágenes nuevo que añadirlas al array del objeto window document?. Dudo porque desconozco el mecanismo por el que el javascript reconoce la ruta de img.src y busca la imagen en memoria.

Adjunto el código que he implementado a ver si alguien me puede confirmar que durante el "mouseover" la imágen que se carga es la precargada y no la está volviendo a descargar.

En el <head>:
Code: [Select]
<script type="text/javascript" language="javascript">
function precargar_img(){
var imagenes = new Array();
for (var i = 0; i<args.length; i++)
{
imagenes[i] = new Image();
imagenes[i].src = precargar_img.arguments[i];
}
}
</script>

Luego en la etiqueta "body"
Code: [Select]
<body bgcolor="#eeeeee" onLoad="precargar_img('IMG/ImagenBtn1On.png','IMG/ImagenBtn2On','IMG/ImagenBtn3On.png')">
Y finalmente en ela imagen del botón:
Code: [Select]
onMouseOver="this.src('ImagenBtn1On.png');" onMouseOut=""this.src('ImagenBtn1Off.png');"
... y lo mismo para los otros dos botones. (la imagen "Off" es la original así que ya debería estar descargada y creo que no hay por qué precargarla con las "On").

También he visto que se usan archivos que contienen las dos imágenes y que jugando con la posición se ve una u otra... ¿Es mejor ese método?

Muchas gracias de antemano.

7
PHP / ¿Hay que pasar $conexion?
« on: Septiembre 21, 2010, 12:28:56 am »
hola a todos,

estoy programando en php una serie de funciones que hacen consultas en una base de datos MySQL.

En cada página llamo a una función "conectar()" que me devuleve una conexión a la base de datos "$conexion". Según parece las consultas a MySQL reciben ese objeto "$conexion" como argumento de entrada, así que estoy incluyéndolo en todas las funciones que escribo.

Mi duda es si hace falta lo que estoy haciendo: Me parece extraño que sea necesario incluir siempre el objeto "$conexion" a la signatura de todas las funciones, es muy engorroso y sé que los lenguajes se diseñan para que sean cómodos. Además he visto en la documentación que las consultas de mysql pueden funcionar también sin ése parámetro.

¿Cuál es la diferencia entre usarlo y no usarlo? ¿puede dar problemas de seguradad? ¿interferirá con las sesiones de usuario cuando lo suba a la web??

Muchas gracias de antemano por vuestra ayuda.

8
Java: Librerías / Aportación
« on: Agosto 31, 2010, 01:42:57 pm »
Hola a todos, esto es una aportación,

os dejo la dirección de otra librería de java. Sirve para trabajo con matrices, sobre todo operaciones matemáticas, pero también para concatenar, hacer casting...

No es del todo completa, pero puede ser muy útil y parece muy cómoda de usar.

http://sites.google.com/site/proyectogoliath

Saludos a todos

9
PHP / Conexión php con MySQL desde Apache
« on: Agosto 20, 2010, 06:26:35 am »
Hola a todos,

He desempolvado los libros de php para ponerme a hacer un servicio web y llevo dos días atascado con un error al conectar con la base de datos.

He instalado Apache2.2 y PHP como módulo de Apache (instalación manual completando el archivo httpd.conf, añadiendo c:/php al PATH ...). Y funciona.

Luego he instalado MySQL server 5 y he creado manualmente (desde el cmd de windows, para comprobar que funciona) una base de datos con un par de tablas y unos cuantos registros en cada tabla. Y funciona.

He escrito una página php sencilla (leer los registros de una tabla y presentar los nombres en una lista desplegable HTML. Al abrir la página veo bien el título y la bienvenida que le he puesto y debajo un error:

Code: [Select]
Fatal error: Call to undefined function mysql_connect() in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\prueba_1.php  on line 10.
He estado en multitud de foros y he hecho todo lo que dicen:
descomentar las líneas "extension" que incluyen las dll de mySQL en el archivo php.ini, corregir la ruta "ext_dir" del mismo archivo, reiniciar apache, reiniciar a veces hasta el ordenador... y nada.

¿De casualidad a alguien se le ocurre qué otra cosa podría estar fallando?

Os agradezco cualquier idea. Gracias.

10
IDEs / Quitar clase de prueba del package
« on: Julio 21, 2010, 02:25:20 pm »
Hola a todos,

Tengo un problema con junit y Eclipse. Hace poco he reorganizado mi proyecto y he separado por fin los .java de los .class poniéndolos en directorios distintos como debe de ser. He intentado pasar la clase de prueba (la única que he hecho por ahora) a otro directorio, pero resulta que está dentro del package que estoy haciendo y eso no me permite sacarlo del directorio del package.

No recuerdo cuándo ni por qué incluí la clase en el package. Sospecho que lo pudo hacer Eclipse automáticamente??... En fin, he probado a borrar la linea de "package mipaquete", pero entonces Eclipse me da un error que no entiendo en el que dice que la clase no pertenece al paquete que se esperaba: "mipaquete".

¿Cómo se soluciona esto?

Gracias.

11
Metodologías Agiles / Dependencias entre clases
« on: Junio 09, 2010, 07:54:20 pm »
Hola a todos.

(no estoy seguro de si éste es el sub-foro adecuado para esta esntrada. Si hay otro mejor decídmelo.)

Os veo hablar muy a menudo de las "métricas", así que hace un par de semanas me puse a leer qué eran y cuáles son los objetivos que buscan. Sólo leerlo me ha ayudado mucho a mejorar la forma de afrontar un proyecto. Me he puesto a aplicar alguna de las ideas a un proyectito y el resultado ha sido dividir una Mega-Clase en cinco clases menores (estoy pensando si sacar todavía una sexta).

Efectivamente, la Mega-Clase tenía demasiados cometidos. Me fue sencilla la división porque en el código tenía más o menos agrupados los métodos según su funcionalidad (estaba pidiendo a gritos que la dividieran).

Tras hacerlo se me ha ocurido comprobar qué clases llaman a métodos de qué otras y, sorpresa, he descubierto la primera gran ventaja de la división en clases: Tres clases son independientes y no llaman a métodos de las demás, Así que tengo tres "puñaditos" de funciones que puedo incluir en un proyecto sin tener que arrastrar todas las demás.

Las dos clases restantes se apoyan en las tres anteriores y también se llaman entre ellas (en ambas direcciones). En este punto tengo una duda:
Llamemos a estas clases A y B: La clase A llama a muchos métodos de B en muchas partes del código y B llama a ún único método de A sólo en dos partes del código. Dicho método de A es corto y sencillo y se me ocurre que copiando su código en B puedo eliminar la dependencia de B respecto de A, para que sólo A dependa de B...

Tengo un par de dudas: 1- si es conveniente o no eliminar la dependencia de B
  2- si existen recomendaciones sobre este tipo de "dependencias" (si se les puede llamar así) o si hay alguna teoría o metodología de diseño que indique si es mejor repetir el código en B o dejar todo como está... (Encuentro que todo lo que leo sobre diseño de proyectos y metodologías me ayuda a mejorar el código, así que me leeré lo que sea que me recomendéis)

Muchas gracias

12
Control de Versiones / Subversion sobre Windows
« on: Junio 03, 2010, 03:57:09 am »
Hola a todos,

Esto no es una duda. Dejo aquí, para quien le sirva, algunos puntos interesantes que me han dado problemas al empezar a usar Subversion en Windows.

1.- Lo primero es que subversion está pensado para sistemas Unix/Linux, por lo que en las rutas del repositorio se utiliza la barra normal "/" para separar los path. Sin embargo Windows utiliza la barra invertida "\", así que, en función de qué dirección estemos escribiendo tendremos que utilizar "/" o "\".

Por ejemplo:
   - Al crear el repositorio en la máquina local especificamos una dirección de nuestro sistema Windows, así que usamos "\":
c:\>svnadmin create "c:\repositorios"

    - Al importar la primera versión utilizamos la dirección "windows" de la carpeta origen y la dirección "Linux" dentro del repositorio donde lo queremos copiar:
C:\>svn import MisProyectos\java\proyectoA file:///G:/repositorios/proyectoA  -m "Copia inicial"

2.- (No sólo para Windows) Es importante crear una copia de trabajo "Working Copy" en la que empezar a trabajar (instrucción "checkout"). Si se realizan cambios en los archivos originales en "C:\>MisProyectos\java\proyectoA" (por seguir el mismo ejemplo) a la hora de actualizar el repositorio (commit) subversion no sabrá de qué versión vienen los archivos nuevos.

Espero que os sirva

Saludos

13
Hola, os agradecería si me ayudáis con algunas dudas sobre instalar y usar "subversion".

Me he decidido a probar subversion, lo he descargado de "subversion.tigris.org". (versión svn-win32-1.6.6) y lo he instalado. En las notas del archivo de instalación ponía que es necesario un servidor Apache, así que me he bajado el .msi de la versión 2.2.15-win32-x86... aunque aún no la he instalado. (he leído ya las instrucciones para hacer que subversion "vea" a Apache)

La primera duda es que no entiendo cuál es el papel de cada servidor. Tengo ya dos servidores y aún nadie me ha hablado de ningún cliente...

La segunda es que he leído en la wiki cómo montar el servidor de svn como servicio "si no está como servicio"... pero no sé cómo comprobar si ya está como servicio o no.

Por otro lado, no estoy seguro de haber entendido cómo funciona todo si decido tener el repositorio en la web... ¿todo es igual pero poniendo la dirección web en vez de "file://... " cuando se hace un "checkout" o un "commit"? (los ejemplos del manual son todos para servidores locales)...

¿los dos servidores van en mi PC?¿ninguno corre en el host en el que aloje el repositorio??

Por otra parte, me he pasado por "code.google.com/intl/es-ES/projecthosting/" y he visto que lo ofrecen para proyectos de software libre... ¿Eso me obliga a compartir el proyecto y/o el código? ¿Los repositorios gratuitos me ahorran tener que instalar alguno de los servidores?

y... bueno, ahora mismo no recuerdo más dudas. Creo que si me aclaran éstas las demás las podré resolver yo solito buscando y leyendo.

Muchas gracias de antemano.

Salu2

14
IDEs / No consigo actualizar los .class
« on: Abril 29, 2010, 12:20:27 am »
Hola a todos,

Desde hace unos días estoy teniendo un problema con Eclipse. Resulta que al ejecutar un  programa no me recompila las clases que he cambiado.

He comprobado si estoy tocando el java correcto y no otro que se llame igual y ése no parece ser el problema, para empezar porque he cambiado de nombre y extensión a las copias de las versiones anteriores de los .java (no guardo los .class antiguos) y los he puesto fuera de la carpeta del "package" y en segundo lugar porque, entre otras cosas, estoy haciendo cambios en la propia clase que contiene el "main" y le doy a ejecutar teniendo la pestaña de ese archivo seleccionada.

Comenzó siendo un problema con las clases de prueba "junit" pero me he dado cuenta de que no se actualiza ningún .class (los tres que he probado por lo menos).

No sé ni qué preguntar... ¿Alguna idea de cuál puede ser el problema?

Muchas gracias.

15
Java JSE / eficacia del "try - catch"
« on: Abril 27, 2010, 07:59:10 pm »
Hola,

estoy haciendo una clase con una colección de métodos "static" para operar sobre matrices (matrices de tipos primitivos). Me he planteado una mejora para que muchos de esos métodos funcionen bien con matrices que tengan filas de distintos tamaños. (Hablo principalmente de métodos que recorren todos los elementos de la matriz con dos bucles "for" anidados) y tengo una duda sobre la eficacia de las opciones que se me ocurren. El tiempo que consumen los métdos llega a ser muy largo a veces y me interesa no derrochar recursos. Las opciones son:

1.- He escrito un método "rowslength()" que devuelve un vector con los tamaños de cada fila y estaba pensando utilizarlo, pero he pensado que no es eficiente llamar a "rowslength()" una y otra vez al principio de cada método,  sobre todo teniendo en cuenta que muchas veces se pasa la misma matriz a muchos métodos seguidos (o incluso anidados).

2.- La opción de escribir:
   
Code: [Select]
for(int j=0; j<matriz[i].length, j++)creo que tiene la misma pega que el método "rowslength()" (salvo que me ahorro el cambio de contexto)

3.- Usar "try - catch" para salir del bucle interno ahorrándome las comprobaciones del tamaño de la fila. El problema es que no tengo ni idea de los recursos que usa la JVM para los "try - catch" y si podría terminar relentizándome el proceso.

¿Es correcto "abusar" de esa forma de la gestión de errores de java?¿Qué pegas puede tener?

Saludos

Pages: [1] 2
ey