elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda sobre combinar métodos de una clase en otra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre combinar métodos de una clase en otra  (Leído 1,835 veces)
Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Duda sobre combinar métodos de una clase en otra
« en: 4 Abril 2019, 04:04 am »

Bueno tengo un Proyecto llamado ProyectoCelular y otro ProyectoCalculadora, quiero que la clase Celular del Proyecto ProyectoCelular pueda tener los metodos que tiene la clase Calculadora del ProyectoCalculadora ¿Cual es la forma correcta? Tener en cuenta que la clase Celular debe poder hacer uso de los metodos de la clase Calculadora

Código
  1. package principal;
  2.  
  3. import clases.Celular;
  4. import clases.Calculadora;
  5.  
  6. public class ProyectoCelular {
  7.  
  8.    public static void main(String[] args) {
  9.        // Esto es el main todavia no lo terminé
  10.  
  11.    }
  12.  
  13. }
  14.  

Código
  1. package clases;
  2.  
  3. import java.lang.Math.*;
  4.  
  5. public class Calculadora {
  6.  
  7.    private String marca, modelo, sistemaOperativo, versionSistemaOperativo;
  8.  
  9.    public Calculadora(String marca, String modelo, String sistemaOperativo, String versionSistemaOperativo) {
  10.        this.marca = marca;
  11.        this.modelo = modelo;
  12.        this.sistemaOperativo = sistemaOperativo;
  13.        this.versionSistemaOperativo = versionSistemaOperativo;
  14.    }
  15.  
  16.    /**
  17.      *
  18.      * @param a
  19.      * @param b
  20.      * @return La suma entre a y b
  21.      */
  22.    public float sumar(float a, float b) {
  23.        return a + b;
  24.    }
  25.  
  26.    /**
  27.      *
  28.      * @param a
  29.      * @param b
  30.      * @return La resta entre a y b
  31.      */
  32.    public float restar(float a, float b) {
  33.        return a - b;
  34.    }
  35.  
  36.    /**
  37.      *
  38.      * @param a
  39.      * @param b
  40.      * @return La multiplicación entre a y b
  41.      */
  42.    public double multiplicar(double a, double b) {
  43.        if (a == 0 || b == 0) {
  44.            return 0;
  45.        } else {
  46.            return a * b;
  47.        }
  48.    }
  49.  
  50.    /**
  51.      *
  52.      * @param a
  53.      * @param b
  54.      * @return La división entre a y b
  55.      */
  56.    public double dividir(float a, float b) {
  57.        return a / b;
  58.    }
  59.  
  60.    /**
  61.      *
  62.      * @param n
  63.      * @return El factorial de un numero
  64.      */
  65.    public int factorial(int n) {
  66.        if (n < 1) {
  67.            return 1;
  68.        } else {
  69.            return n * factorial(n - 1);
  70.        }
  71.    }
  72.  
  73.    /**
  74.      * @return the marca
  75.      */
  76.    public String getMarca() {
  77.        return marca;
  78.    }
  79.  
  80.    /**
  81.      * @param marca the marca to set
  82.      */
  83.    public void setMarca(String marca) {
  84.        this.marca = marca;
  85.    }
  86.  
  87.    /**
  88.      * @return the modelo
  89.      */
  90.    public String getModelo() {
  91.        return modelo;
  92.    }
  93.  
  94.    /**
  95.      * @param modelo the modelo to set
  96.      */
  97.    public void setModelo(String modelo) {
  98.        this.modelo = modelo;
  99.    }
  100.  
  101.    /**
  102.      * @return the sistemaOperativo
  103.      */
  104.    public String getSistemaOperativo() {
  105.        return sistemaOperativo;
  106.    }
  107.  
  108.    /**
  109.      * @param sistemaOperativo the sistemaOperativo to set
  110.      */
  111.    public void setSistemaOperativo(String sistemaOperativo) {
  112.        this.sistemaOperativo = sistemaOperativo;
  113.    }
  114.  
  115.    /**
  116.      * @return the versionSistemaOperativo
  117.      */
  118.    public String getVersionSistemaOperativo() {
  119.        return versionSistemaOperativo;
  120.    }
  121.  
  122.    /**
  123.      * @param versionSistemaOperativo the versionSistemaOperativo to set
  124.      */
  125.    public void setVersionSistemaOperativo(String versionSistemaOperativo) {
  126.        this.versionSistemaOperativo = versionSistemaOperativo;
  127.    }
  128.  
  129. }
  130.  

Código
  1. //Me parece que aca es donde tengo que poner algo de la clase Calculadora
  2. package clases;
  3.  
  4. public class Celular {
  5.    private String marca, modelo, color;
  6.    private double precio;
  7.  
  8.    public Celular(String marca, String modelo, String color, double precio) {
  9.        this.marca = marca;
  10.        this.modelo = modelo;
  11.        this.color = color;
  12.        this.precio = precio;
  13.    }
  14.  
  15.    /**
  16.      * @return the marca
  17.      */
  18.    public String getMarca() {
  19.        return marca;
  20.    }
  21.  
  22.    /**
  23.      * @param marca the marca to set
  24.      */
  25.    public void setMarca(String marca) {
  26.        this.marca = marca;
  27.    }
  28.  
  29.    /**
  30.      * @return the modelo
  31.      */
  32.    public String getModelo() {
  33.        return modelo;
  34.    }
  35.  
  36.    /**
  37.      * @param modelo the modelo to set
  38.      */
  39.    public void setModelo(String modelo) {
  40.        this.modelo = modelo;
  41.    }
  42.  
  43.    /**
  44.      * @return the color
  45.      */
  46.    public String getColor() {
  47.        return color;
  48.    }
  49.  
  50.    /**
  51.      * @param color the color to set
  52.      */
  53.    public void setColor(String color) {
  54.        this.color = color;
  55.    }
  56.  
  57.    /**
  58.      * @return the precio
  59.      */
  60.    public double getPrecio() {
  61.        return precio;
  62.    }
  63.  
  64.    /**
  65.      * @param precio the precio to set
  66.      */
  67.    public void setPrecio(double precio) {
  68.        this.precio = precio;
  69.    }
  70.  
  71.  
  72. }
  73.  



« Última modificación: 4 Abril 2019, 04:06 am por Beginner Web » En línea

7w7
rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Duda sobre combinar métodos de una clase en otra
« Respuesta #1 en: 4 Abril 2019, 11:03 am »

En el constructor de la clase Celular puedes añadir un parámetro tipo Calculadora, o un setter.

Vía herencia también. Cuando llegue a la casa te ayudo más estoy en la caverna del curro.




Bien aquí vamos, vamos a usar Herencia con la palabra reservada extends en la clase Celular

Otra vía es por medio de interfaces

    Investigar
    • herencia simple de clases
    • Uso de super
    • Modificador de acceso protected

    [/list]
    Código
    1. package foro;
    2. import java.lang.Math.*;
    3. import java.util.logging.Logger;
    4.  
    5. /**
    6.  * Clase Calculadora
    7.  */
    8. public class Calculadora {
    9.  
    10.    private String marca;
    11.    private String modelo;
    12.    private String sistemaOperativo;
    13.    private String versionSistemaOperativo;
    14.  
    15.    public static final Logger LOGGER = Logger.getLogger(ProyectoCelular.class.getSimpleName());
    16.  
    17.    public Calculadora() {
    18.        super();
    19.    }
    20.  
    21.    public Calculadora(String marca, String modelo, String sistemaOperativo, String versionSistemaOperativo) {
    22.        this.marca = marca;
    23.        this.modelo = modelo;
    24.        this.sistemaOperativo = sistemaOperativo;
    25.        this.versionSistemaOperativo = versionSistemaOperativo;
    26.    }
    27.  
    28.    /**
    29.      *
    30.      * @param a
    31.      * @param b
    32.      * @return La suma entre a y b
    33.      */
    34.    public float sumar(float a, float b) {
    35.        return a + b;
    36.    }
    37.  
    38.    /**
    39.      *
    40.      * @param a
    41.      * @param b
    42.      * @return La resta entre a y b
    43.      */
    44.    public float restar(float a, float b) {
    45.        return a - b;
    46.    }
    47.  
    48.    /**
    49.      *
    50.      * @param a
    51.      * @param b
    52.      * @return La multiplicación entre a y b
    53.      */
    54.    public double multiplicar(double a, double b) {
    55.        if (a == 0 || b == 0) {
    56.            return 0;
    57.        } else {
    58.            return a * b;
    59.        }
    60.    }
    61.  
    62.    /**
    63.      *
    64.      * @param a
    65.      * @param b
    66.      * @return La división entre a y b
    67.      */
    68.    public double dividir(float a, float b) {
    69.        return a / b;
    70.    }
    71.  
    72.    /**
    73.      *
    74.      * @param n
    75.      * @return El factorial de un numero
    76.      */
    77.    public int factorial(int n) {
    78.        if (n < 1) {
    79.            return 1;
    80.        } else {
    81.            return n * factorial(n - 1);
    82.        }
    83.    }
    84.  
    85.    /**
    86.      * @return the marca
    87.      */
    88.    public String getMarca() {
    89.        return marca;
    90.    }
    91.  
    92.    /**
    93.      * @param marca the marca to set
    94.      */
    95.    public void setMarca(String marca) {
    96.        this.marca = marca;
    97.    }
    98.  
    99.    /**
    100.      * @return the modelo
    101.      */
    102.    public String getModelo() {
    103.        return modelo;
    104.    }
    105.  
    106.    /**
    107.      * @param modelo the modelo to set
    108.      */
    109.    public void setModelo(String modelo) {
    110.        this.modelo = modelo;
    111.    }
    112.  
    113.    /**
    114.      * @return the sistemaOperativo
    115.      */
    116.    public String getSistemaOperativo() {
    117.        return sistemaOperativo;
    118.    }
    119.  
    120.    /**
    121.      * @param sistemaOperativo the sistemaOperativo to set
    122.      */
    123.    public void setSistemaOperativo(String sistemaOperativo) {
    124.        this.sistemaOperativo = sistemaOperativo;
    125.    }
    126.  
    127.    /**
    128.      * @return the versionSistemaOperativo
    129.      */
    130.    public String getVersionSistemaOperativo() {
    131.        return versionSistemaOperativo;
    132.    }
    133.  
    134.    /**
    135.      * @param versionSistemaOperativo the versionSistemaOperativo to set
    136.      */
    137.    public void setVersionSistemaOperativo(String versionSistemaOperativo) {
    138.        this.versionSistemaOperativo = versionSistemaOperativo;
    139.    }
    140.  
    141.    @Override
    142.    public String toString() {
    143.        final StringBuilder sb = new StringBuilder("\nCalculadora");
    144.        sb.append("\nmarca='").append(marca).append("\n");
    145.        sb.append(", modelo='").append(modelo).append("\n");
    146.        sb.append(", sistemaOperativo='").append(sistemaOperativo).append("\n");
    147.        sb.append(", versionSistemaOperativo='").append(versionSistemaOperativo).append("\n");
    148.        return sb.toString();
    149.    }
    150. }
    151.  

    Cuando establecemos herencia, de una clase con un constructor definido como el tuyo, debemos invocarlo con super() y si tiene parámetros setearselos
    en este caso la clase celular tiene 2 atributos propios de ella, el color y precio, entonces, bastaría con dejar los setters/getters de color y precio, ya que los otros se heredan

    La visibilidad de los atributos/variables de instancia, siendo protected tendrán visibilidad en el mismo paquete, para verlas desde otro paquete deben ser publicas, pero por convención en java, deberían ser en lo posible declaradas como private, accediendo a ellas via getters



    Código
    1. package foro;
    2.  
    3. /**
    4.  * Clase Celular
    5.  */
    6. public class Celular extends Calculadora { // extendemos a Calculadora
    7.  
    8.    //private String marca;
    9.    //private String modelo;  // estas dos variables no hacen falta, porque se heredan tambien
    10.    private String  color;
    11.    private double precio;
    12.  
    13.    /**
    14.      * Nuevo constructor vacio
    15.      */
    16.    public Celular() {
    17.        super(); // super invoca al constructor de la clase Calculadora
    18.    }
    19.  
    20.    public Celular(String marca, String modelo, String color, double precio, String sistemaOperativo, String versionSistemaOperativo) {
    21.        /**
    22.          * con este super invocamos al constructor de la clase Calculadora, seteandole los parametros
    23.          * correspondientes chavalina.
    24.          */
    25.        super(marca,modelo, sistemaOperativo,versionSistemaOperativo);
    26.        this.color = color;
    27.        this.precio = precio;
    28.    }
    29.  
    30.    /**
    31.      * @return the marca
    32.      */
    33.    public String getMarca() {
    34.        return marca;
    35.    }
    36.  
    37.    /**
    38.      * @param marca the marca to set
    39.      */
    40.    public void setMarca(String marca) {
    41.        this.marca = marca;
    42.    }
    43.  
    44.    /**
    45.      * @return the modelo
    46.      */
    47.    public String getModelo() {
    48.        return modelo;
    49.    }
    50.  
    51.    /**
    52.      * @param modelo the modelo to set
    53.      */
    54.    public void setModelo(String modelo) {
    55.        this.modelo = modelo;
    56.    }
    57.  
    58.    /**
    59.      * @return the color
    60.      */
    61.    public String getColor() {
    62.        return color;
    63.    }
    64.  
    65.    /**
    66.      * @param color the color to set
    67.      */
    68.    public void setColor(String color) {
    69.        this.color = color;
    70.    }
    71.  
    72.    /**
    73.      * @return the precio
    74.      */
    75.    public double getPrecio() {
    76.        return precio;
    77.    }
    78.  
    79.    /**
    80.      * @param precio the precio to set
    81.      */
    82.    public void setPrecio(double precio) {
    83.        this.precio = precio;
    84.    }
    85.  
    86.    @Override
    87.    public String toString() {
    88.        final StringBuilder sb = new StringBuilder();
    89.        sb.append(super.toString());
    90.        sb.append("\ncolor='").append(color).append("\n");
    91.        sb.append(", precio=").append(precio);
    92.        return sb.toString();
    93.    }
    94. }
    95.  

    Código
    1. package foro;
    2.  
    3.  
    4. public class ProyectoCelular {
    5.  
    6.    public static void main(String[] args) {
    7.        // Esto es el main todavia no lo terminé
    8.  
    9.        final Celular celular = new Celular();
    10.        /**
    11.          * Configurando por medio de setters NO-THREAD-SAFE
    12.          */
    13.        celular.setColor("Rojo");
    14.        celular.setMarca("Samsung");
    15.        celular.setModelo("I9300");
    16.        celular.setPrecio(200);
    17.        celular.setSistemaOperativo("Android KitKat");
    18.        celular.setVersionSistemaOperativo("4.4.4");
    19.  
    20.        /**
    21.          * Todos ellos retornan un valor
    22.          * que puedes mostrar con la consola o logger, logger es lo mas correcto
    23.          */
    24.        celular.factorial(2);
    25.        celular.dividir(2,3);
    26.        celular.sumar(2,3);
    27.        celular.restar(5,1);
    28.        celular.multiplicar(5,5);
    29.  
    30.        Calculadora.LOGGER.info(celular.toString());
    31.    }
    32.  
    33. }
    34.  


    Estamos en presencia de un constructor telescópico, muchos parámetros a veces difícil de usar, coste de mantenimiento, legibilidad etc, patrón Builder es la solución.

    A simple vista pensarías, bueno me creo otro constructor y le añado parámetros, pero vienes de nuevo y añades otro y así, nunca terminara, o este mismo contructor añadirle mas parámetros.

    O la típica vía de usar setters, NO-THREAD-SAFE, es decir no Inmutable(Como String, StringBuffer, la api LocalDate del paquete java.time), si usas ese bean en un Thread podrian pasar cosas raras y difíciles de resolver.  >:D tema que, podemos tratar luego.

     

    Código
    1. public Celular(String marca, String modelo, String color, double precio, String sistemaOperativo, String versionSistemaOperativo) {
    2.        /**
    3.          * con este super invocamos al constructor de la clase Calculadora, seteandole los parámetros
    4.          * correspondientes chavalina.
    5.          */
    6.        super(marca,modelo, sistemaOperativo,versionSistemaOperativo);
    7.        this.color = color;
    8.        this.precio = precio;
    9.    }

    Recuerda retomar este hilo y estudiarlo bien , donde tienes otro ejemplo de herencia https://foro.elhacker.net/java/metodo_mostrar_todos_los_atributos_de_un_objeto_por_pantallaresuelto-t494141.0.html


    En la clase Celular te puse unos bugs que debes de resolver, recuerda que hay métodos en la clase Celular que no te hacen falta, es decir, puedes quitarlos, debido a que los heredas


    « Última modificación: 6 Abril 2019, 02:16 am por rub'n » En línea



    rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
    If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
    Páginas: [1] Ir Arriba Respuesta Imprimir 

    Ir a:  

    WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines