Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - SDCC

#31
Pero por ejemplo en cada método que yo implemente de la interfaz deberia hacer una comprobación de si es de tipo "Contacto Empresarial" o "Contacto Personal" y en caso contrario lanzar una excepcion como IlegalArgumentException? , ¿ Es normal que en estos casos se llene de casteos y de lanzamiento de excepciones para especificar que no se aceptan argumentos de la clase base si no de solo una clase especifica? o se hace la clase sin tomar en cuenta esas cosas pensando en que el programa jamas le va pasar como argumento un objeto de la herencia que no era para ese tipo de directorio.
#32
Hola a todos tengo un problema un tanto sencillo pero que no sè cual de mis ideas sea las mas adecuada.

El problema se reduce a una parte en donde debo tener 2 tipos de directorios.

  • Directorio Empresarial.Almacenada contactos empresariales
  • Directorio Personal.Almacena contactos personales

Practicamente ambos directorios deben realizar los mismos mètodos solo con la diferencia de el tipo de contacto que almacena y algunas consultas que se realizan dentro de los métodos..
Nota.Existe una superclase que es padrede "Contacto Empresarial" y "Contacto Personal" que lleva como nombre "Contacto"

Mi primera solución planteaba crear una interfaz "Directorio" como la siguiente(hacen falta definir un par de metodos).

Pero no sé si esta esta es la manera más correcta de hacerlo, es decir, los argumentos y retornos de los métodos ya estan definidos en la la interfaz lo cual en cierta manera me hace pensar en como tratar los casos especiales de cada clase que lo implemente, es decir, en mi clase "Directorio Empresarial" yo quiero que sus metodos solo acepten como argumentos y constructor datos de tipo "Contacto Empresarial" pero al yo implementar una interfaz esta me esta definiendo argumentos como de tipo "Contacto" que podria provocar errores en algunos metodos por lo cual entonces seria necesario lanzar una exepcion si me envian como argumento un objeto de tipo "Contacto"en vez de uno de tipo "Contacto Empresarial" .... y en ese caso me hace pensar que tal vez mi diseño es erroneo o que no sè como diseñar este tipo de problemas.

Yo necesito definir estos dos tipos de directorios por que aunque realmente tiene los mismos mètodos yo requiero que algunos mètodos hagan la misma tarea pero ademas hagan una consulta especifica a una base de datos en el caso de que sea un directorio empresarial/personal va ser distinta la consulta.

Tengo idea de un segundo planteamiento donde defino una clase abstracta "Directorio " que tiene como atributo un objeto de tipo "Contacto" y los respectivos metodos y que las clases derivadas ("Directorio Empresarial" y "Directorio Personal") solo implementa esos metodos pero caigo en la misma duda. Un Directorio Empresarial al heredar de Directorio va tener como atributo un objeto Contacto que puede almacenar por herencia un Contacto Empresarial pero ¿ Yo debo exigir que a esta clase Directorio Personal solo se le pueda pasar objetos Contacto Empresarial aún cuando los métodos que hereda y sobrescribe de la clase Directorio permiten que se la pase un objeto de Contacto?. Yo podría pasar por alto esto debido a que estoy haciendo el programa y sé como puedo controlar que esta clase de error no suceda pero me da la sensación de que como buena practica las clases no se deben prestar para dejar huecos que puedan causar errores al ser reutilizadas.
#33
Listo, he ejecutado el comando y no me aparece ningún registro sobre algún archivo dañado pero sin embargo al final me aparece Failed to transfer logged messages to the event log with status 50 Actualmente logre traspasar mi carpeta Documentos a la memoria auxiliar(D:), realmente no me importa ya tanto restaurar el windows a como estaba lo que me llega a preocupar un poco es perder la licencia original . En dado caso de que logre restaurar el sistema operativo mediante ayuda de una USB ,¿ esto no tendría por que afectar mi segundo memoria(D:)donde tengo mi carpeta documentos(la que me importa) o si? y en el peor de los casos ¿ yo podría borrar windows e instalar una distribución de linux conservando la licencia de windows para un futuro en el que agregue un dual boot con más calma y varios respaldos ? XDD.  

De antemano gracias por tu tiempo.
#34
Buenas a todos resulta que tengo una computadora con Windows 10 en la cual hasta hace un par de días funcionaba bien hasta que por descuido un día mi unidad de memoria donde tengo almacenado el sistema operativo se lleno... No le tome mucho caso y lo único que hice fue eliminar un par de archivos  que estoy seguro que no eran nada del sistema operativo si no que eran basura que yo tenía por ahí. Posterior a esto yo continue con la descarga de vmware y de una iso de kali hasta que llego el paso en el que quise descomprimir un archivo y al yo intentar abrir el programa que lo descomprimía windows dejo de responder.. Al cabo de unos minutos empece a reiniciar la pc y me tope con una hermosa pantalla Azul que mostraba como mensaje de error "Bad Config Info", he buscado posibles soluciones como restaurar los datos de la carpeta config y seguir algunos pasos que aconsejan los foros para dar solución a este tipo de problema sin llegar a ningun resultado.

Hasta el momento he intentado apoyar la solución desde una ISO en una memoria sin siquiera lograr que se arranque el sistema desde ahí( Ojo. Estoy seguro que la memoria tiene la ISO de manera correcta y ademas puse como prioridad la USB a la hora del arranque del sistema), ademas he intentado entrar en modo seguro consiguiendo el mismo error que siempre me ha marcado. ¿ De casualidad alguien tiene algun indicio de que podria ser?, no sé si el hecho de que estuviera instalando vmware y la iso de kali influyera en el error o que solo fuera simplemente el hecho de que se lleno la unidad de memoria donde estaba el sistema operativo. Quiero recalcar que el sistema operativo mostro fallas unos 15 minutos despues de que yo libere un espacio de la unidad de memoria.

Quiero agregar que dentro de las opciones que me aparece dentro de la pantalla azul tengo acceso a la CMD y he podido comprobar que me deje navegar por mis archivos y los del sistema operativo, en caso de que sea un error dado por un daño en la unidad de memoria del sistema ¿ Como podria darme cuenta que eso ?
#35
Disculpen por revivir el tema...Con referencia a la solucion con ayuda de la funcion fseek me ha surgido la siguiente duda.Investigando sobre la funcion he visto que sus valores de retorno debera ser 0 para verificar que realmente ha realizado su tarea de manera correcta a partir de esto he intentado complementar un poco el ejemplo que se mostraba al principio.


#include <stdio.h>
   
       int main() {
           char c;
           int flagValidacion ;
           while(1) {
               printf("> ");
               c = getchar();
               flagValidacion = fseek(stdin, 0, SEEK_END);
               if(flagValidacion)
                printf("Error!!\n");
               printf("Caracter: %c\n", c);
           }
       }


A partir de lo anterior efectivamente la funcion limpiaba el buffer sin embargo su valor de retorno me indicaba que no ha cumplido su tarea de manera adecuada debido a que retornaba un valor distinto de 0.He intentado esto con un simple archivo de texto y me ha funcionado de manera correcta,incluso experimentando un poco mas he notado que si yo llamo la funcion ftell despues de realizar fseek(stdin,0,SEEK_END)  siempre me va devolver 0 mientras que en un archivo de texto comun realmente me regresa la posicion final de mi archivo.Disculpen si cometo algun error pero tengo dudas sobre que es lo que realmente esta haciendo debido a yo pensaba que con ayuda de fseek simplemente nos saltariamos hasta el final del archivo pero eso no significa que nosotros  efectivamente borremos todo lo que estaba contenido anteriormente, si esto es cierto entonces ¿es posible que en algun momento tengamos tantos datos que nos hemos saltado en el stdin que nuestro programa colapse?
#36
Disculpa alberto,viendo tu programa que proporcionaste me surgio la siguiente duda en el ingreso de cadenas...

printf("Ingrese frase 1 maximo 50 caracteres \n");
fgets(frase,50,stdin);
fseek(stdin, 0, SEEK_END);
frase[strcspn(frase,"\n\r")] = '\0';

Entiendo como lees la cadena sin embargo me surge una duda en el uso de fseek...Tengo entendido que en este ejemplo en especifico lo que hace la funcion fseek es posicionar el indicador de la entrada estandar hasta al final de manera que si se ingreso mas de 50 caracteres estos quedaran atras del indicador y ya no abra problema al yo volver a leer valores de stdin sin embargo si el programa es un poco mas grandes ¿es posible que surga un desbordamiento del buffer ? debido a que realmente no se esta limpiando el buffer ,en caso de que asi sea ¿cual seria la mejor solución?,conozco la funcion fflush pero tengo entendido que puede que su funcionamiento no siempre sea el esperado.
#37
Al parecer la unica solucion(bastante seniclla por cierto) que encontre fue simplemente invertir el orden en que hago las cosas.Primero relleno la zona que va estar conformada por la figura y posterior a eso dibujo el polygono.
#38
Buenas tardes,dias o noches,estoy haciendo un programita en el cual me he topado con un detalle a la hora de intentar dibujar un polygon en una JPanel en el cual quiero que el color de sus aristas sea totalmente configurable al igual que su fondo.He realizado un intento con el siguiente segmento de codigo:

Código (java) [Seleccionar]

//Coloca color de arista y dibuja figura
               g.setColor(Color.BLACK);
               g.drawPolygon(figura);
//Coloca color de fondo y rellena la figura
               g.setColor(Color.WHITE);
               g.fillPolygon(figura);


Nota.Para no extender mas el codigo la variable figura es de tipo Polygon.

El anterior codigo tambien lo he adaptado de manera muy similar para figuras sin vertices como un circulo.

Código (java) [Seleccionar]


g.setColor(figu.getColorArista());
               g.drawOval(figu.getCentro().x-radio,figu.getCentro().y-radio,radio*2,radio*2);
               g.setColor(figu.getColorFondo());
               g.fillOval(figu.getCentro().x-radio,figu.getCentro().y-radio,radio*2,radio*2);




Sin extender aún mas el programa....Mis resultados no han sido del todo buenos consiguiendo como resultado algo como lo siguiente:



Como se puede observar realmente se ve el cambio de color solo en ciertas orillas de la figura, esto depende de la forma de la figura.He pensado en hacer toda la figura del mismo color y despues simplemente trazar unas lineas que unieran todos los vertices con el color de las aristas de manera que se sobrepongan a la orilla de la figura.Les agradeceria si me compartieran una forma mas formal u otra forma distinta a la planteada que me pudiera dar solucion a este problema,gracias.
#39
Java / Re: Alinear un JLabel en un Panel
15 Noviembre 2018, 01:49 AM
Ohhh ya veo  :D,solo una duda mas...Veo que realmente si se coloco un poco mas a la izquierda pero crees que haya una forma de colocar totalmente el titulo en el borde izquierdo o tendria que encapsular aun mas mi Panel y mi Titutlo de manera que asignara el borde izquiero a el titulo?
#40
Java / Re: Alinear un JLabel en un Panel
15 Noviembre 2018, 00:03 AM
Si , asi es , lo tengo contenida en un JFrame que es la ventana principal y que tiene un layout de tipo BorderLayout.Te adjunto esta clase y una imagen de la interfaz compelta.

Código (java) [Seleccionar]

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class VentanaPrincipal extends JFrame {
    JMenuBar menuArchivos ;
    JPanel menuOpcionesFiguras;
    JPanel pizarron;
    JPanel ayudaMascota;

    public VentanaPrincipal(){
       
       
        super("LoroPaint");
        setLayout(new BorderLayout());
 

        //Creacion de componentes

        menuArchivos = new BarraArchivos();
        setJMenuBar(menuArchivos);

        menuArchivos.setBackground(new Color(149, 209, 208));
        menuOpcionesFiguras = new MenuOpcionesFiguras();
        menuOpcionesFiguras.setBackground(new Color(100,156,56));

        pizarron = new Pizarron();
        pizarron.setBackground(new Color(230, 255, 255));
        pizarron.setToolTipText("Escenario");
        pizarron.setBorder(BorderFactory.createLineBorder(Color.black));

        ayudaMascota = new AyudaMascota();
        ayudaMascota.setBackground(new Color(149, 209, 208));
        ayudaMascota.setToolTipText("Consejos");
        ayudaMascota.setBorder(BorderFactory.createLineBorder(Color.black));
       

        //Agregacion de los componentes al panel
        add(menuOpcionesFiguras,BorderLayout.EAST);
        add(pizarron,BorderLayout.CENTER);
        add(ayudaMascota,BorderLayout.SOUTH);

       

        //Agregar Eventos a los componentes



    }
}