Foros del Web » Programación para mayores de 30 ;) » Java »

POO en java opinion porfavor

Estas en el tema de POO en java opinion porfavor en el foro de Java en Foros del Web. Me podrían dar su opinión de un proyecto desarrollado de esta manera. Soy novata en esto de java y POO pero se me hace un ...
  #1 (permalink)  
Antiguo 12/10/2015, 12:27
 
Fecha de Ingreso: marzo-2011
Mensajes: 70
Antigüedad: 13 años, 8 meses
Puntos: 2
POO en java opinion porfavor

Me podrían dar su opinión de un proyecto desarrollado de esta manera. Soy novata en esto de java y POO pero se me hace un poco extraño como tienen implementado esto. Pero probablemente por mi falta de experiencia la que no entienda sea yo, espero y me puedan ayudar.


Código:
public class SqlSelect {

	
	public static String SelectSimple(String SqlSelect) throws SQLException{ //Obtiene el SQL directamente de una base de datos

	    String sConsulta = null; 
	    Connection con   = null;
	    Statement stmt   = null;    
	    try {
	        con = conecctions.ConnBi.getConnection();
	        stmt = con.createStatement();
	        String ConsultaSql = SqlSelect;        
	        ResultSet ConsultaWhere = stmt.executeQuery(ConsultaSql);
	        while (ConsultaWhere.next()) {
	        sConsulta = sConsulta + "<option value=\""+ConsultaWhere.getString(1)+"\">"+ConsultaWhere.getString(2)+"</option>";   

	            
	        }
	        ConsultaWhere.close();
	        stmt.close();
	    } catch (Exception e) {
	        System.out.println("Exception thrown");
	        e.printStackTrace();
	    } finally {
	        if (con != null) {
	            con.close();
	        }
	      }
	    
	return sConsulta;
	  }
}
Esta clase obtiene el resultado directamente de una consulta "SELECT * FROM TABLA" guardado en una tabla dentro de una base de datos. Ahi mismo crean los <options> y <value> de un elemento select en html para despues llenarlo desde una jsp como esta.


cat_paises.jsp
Código:
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<%@page import="combos.SqlSelect"%> //Aqui importan la clase anterior
<%String sistema_id = request.getParameter("SIS01"); //agregan el id del sistema
  String combo_paises = combos.SqlSelect.SelectSimple(sqlString); %> //Llaman metodo select Simple de la clase anterior junto con el parametro sqlString
<select id="pais_id" name="pais_id,'<%=sistema_id%>');}"> //Aqui llenan el select 
	<option value="0" >Seleccione un Pais</option>
	<%=combo_paises%>
</select>
El select lo llenan con la ayuda del framework Prototype

Código:
function combo_paises(sistema_id)
	{var target = $('com_paises');
	 var StrUrl = "cat_paises.jsp?sistema_id="+sistema_id;
	 var est = new Ajax.Updater(target, StrUrl, {method: 'get'}); //Funcion framework prototype 
	};
function combo_estados(pais_id,sistema_is)
	{var target = $('com_estados');
	 var StrUrl = "cat_estados.jsp?pais_id="+pais_id+"&sistema_id="+sistema_id;
	 var est = new Ajax.Updater(target, StrUrl, {method: 'get'}); //Funcion framework Prototype
	};
No estoy de acuerdo con su implementacion porque en la clase "SqlSelect" me regresaria por ejemplo <option value="Mexico">Mexico</option> y el problema es que ahora en ves de combos tambien coy a necesitar los paises en una tabla html, entonces tendria que hacer una clase exclusiva para cada elemento html.


asi como esta el codigo es POO?

Gracias.
  #2 (permalink)  
Antiguo 13/10/2015, 01:58
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: POO en java opinion porfavor

Dando una explicación muy simple, la POO es aquella en la que se basa en la abstracción de objetos de la vida real.

Estos objetos están definidos por sus características y por las cosas que son capaces de hacer.

Por ejemplo un coche tiene las características de color, nº de ruedas, cilindrada del motor, potencia del motor, color, etc

Un coche a su vez es capaz de arrancar, moverse hacia delante, moverse hacia atrás, girar, etc.

Lo mismo pasaría con la POO, si queremos hacer un objeto coche le tendremos que asignar unos atributos (características) y unos métodos.

Lo que se hace en java no es crear objetos en sí, sino plantillas de objetos (clases). Estas clases tienen las características del objeto... solo que sin concretar. O sea, que tienen la característica color... pero no tiene un valor asignado. Tiene la característica cilidrada del motor, pero no tiene un valor asignado. Para utilizar estos objetos debemos usar esa plantilla (clase) para instanciarlo. Que no es otra cosa que crear una copia de la plantilla y darle valores personalizados (color, nº ruedas, cilindrada, etc) Y de esa forma ya podemos usar ese objeto, que ya si tiene valores concretos de sus características. Y gracias a esos valores concretos sus métodos nos darán resultados concretos, en los que normalmente intervendrán los valores de dichas características. Por ejemplo el método correr, que nos devolverá un int con la velocidad máxima de km/h que utiliza el atributo potencia del motor. Y que sin darle un valor concreto a ese atributo no puede dar un valor concreto al resultado de ese método.

Así, para ir de una ciudad a otra has de usar el método correspondiente de tu copia personalizada de la clase coche, o sea, tu objeto coche. Es el objeto coche el que hace las cosas que tú necesitas que haga. Como ir de una ciudad a otra.

Básicamente esa es una explicación muy sencilla de como funciona la POO.

En tu caso en concreto yo veo que tu clase de java SqlSelect te está devolviendo el valor que tú quieras que te devuelva. Por lo tanto está haciendo bien su trabajo.

Ahora comentas que el valor que te devuelve <option value="Mexico">Mexico</option> no te sirve, porque de ahí tienes que sacar la palabra "Mexico" para usarla en otros sitios de tu código HTML. Es decir, que en otros sitios de tu código HTML todos los caracteres que van antes y después de Mexico te sobran.

Pues entonces la solución es muy sencilla. En Java has de tener un método (por ejemplo de modo private porque solo se va a usar desde dentro de esa misma clase) que te devuelva única y exclusivamente "Mexico" que es lo que te devuelve la consulta sql. Y sin agregar nada más, que esa función te devuelve un String con única y exclusivamente esa palabra.

Ahora, en tu código HTML necesitas poner todo lo que rodea a la palabra Mexico... pues créate otro método distinto de la clase (que sea public pues la vas a utilizar desde fuera) que llame a la 1ª, que recoja la palabra Mexico y construya ese String que tiene todo lo que rodea a la palabra Mexico, junto con Mexico.

Luego en tu código HTML necesitas poner un código distinto, que también tenga otras cosas distintas rodeando a la palabra Mexico... pues créate en Java un método distinto que llame al 1º, que recoja la palabra Mexico y te devuelva el código HTML que necesitas.

Y así sucesivamente. De forma que tienes en java una clase con muchos métodos String, y que cada uno te devuelve un String distinto. Igual que un coche tiene el método andar hacia delante y el método andar hacia atrás, tu objeto de la clase SqlSelect tiene un método de construcción de Radiobutton de HTML, tu método de construcción de tabla HTML, tu método de construcción de botón HTML, etc... y así vas construyendo tu HTML con los resultados de tu consulta sql. Así tendrás, por ejemplo un método que se llame "DameRadioButton", otro que se llama "DameTable", y según si quieres un RadioButton o una table pues llamas a uno o a otro. No solo 1 método, sino varios.

Así pues, es el mismo objeto el que tiene varios métodos, no tienes distintos objetos, solo tienes 1 objeto con distintos métodos.

PD: Los motores gestores de bases de datos están muchísimo más optimizados que los lenguajes de programación a la hora de tratar datos provenientes de una base de datos, así que el proceso de filtrar datos dentro de una tabla, desechando X o Y columna se hace muchísimo más rápido en el gestor de la base de datos. Por lo tanto, si ya sabes exactamente que vas a utilizar la columna 1 y las demás las vas a desechar... en vez de usar la consulta Select * ganarías poniendo el nombre de la columna/s que vayas a usar, haciendo que sea el motor de la base de datos el encargado de desechar esos campos. Por otra parte, el programa utilizará muchísimo menos memoria, pues recibe muchísima menos información.

Última edición por Kritik; 13/10/2015 a las 02:31
  #3 (permalink)  
Antiguo 13/10/2015, 02:58
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: POO en java opinion porfavor

Cita:
Iniciado por June310 Ver Mensaje
No estoy de acuerdo con su implementacion porque en la clase "SqlSelect" me regresaria por ejemplo <option value="Mexico">Mexico</option> y el problema es que ahora en ves de combos tambien coy a necesitar los paises en una tabla html, entonces tendria que hacer una clase exclusiva para cada elemento html.


asi como esta el codigo es POO?

Gracias.
Pues tienes totalmente la razón. La implementación actual de la clase es pésima porque viola los principios SOLID de la POO.

Si tienes una clase que se llama SqlSelect, lo que esperas es que te devuelva los resultados y no un fragmento de HTML.

Una opción más correcta sería modificar la firma de la función para que devuelva una lista de Strings y luego la clase que llama a SqlSelect se encargue de usar los resultados para montar el HTML que necesite en ese momento (ya sea un desplegable, o para una tabla de países). De esta manera, si le quieres dar más usos a los países almacenados en la tabla no tendrás que modificar la SqlSelect ;)
__________________
Aviso: No se resuelven dudas por MP!

Etiquetas: clase, jsp, poo, sql, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:49.