Curso Avanzado de Java SE

Curso Avanzado de Java SE

Anah铆 Salgado D铆az de la Vega

Anah铆 Salgado D铆az de la Vega

Ejercicio. Clases Abstractas

4/39

Lectura

Tengo un programa que dibuja figuras autom谩ticamente.

302.hipster-pattern-.jpg

He creado una clase abstracta llamada Figura, esta tiene un m茅todo llamado dibujate()

驴Qu茅 tendr铆a que hacer para que la clase Triangulo pueda sobreescribir este m茅todo y poner el c贸digo que haga que dibuje la forma indicada?

Analiza el problema, realiza tu diagrama y comparte tu respuesta en la secci贸n de discuciones.

Aportes 166

Preguntas 3

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

public abstract class Figura {
	public abstract void dibujate();
}

public class Triangulo extends Figura {

	@Override
	public void dibujate() {
		System.out.println("Voy a dibujar un Triangulo");
	}	

}

clase Figura

public abstract class Figura {

public abstract void dibulate ();
}

Clase Triangulo

public class Triangulo extends Figura {
@Override
	public void dibujate() {
		
	}
}

Aqu铆 mi Tarea 8)

public abstract class Figura {
	
	protected abstract void dibujar();
	
}

public class Triangulo extends Figura{

	//Constructor
	public Triangulo() {}
	
	//Implementaci贸n m茅todo abstracto de la clase padre
	@Override
	public void dibujar() {
		
		System.out.println("Dibujando un Triangulo");
		
	}

}


public class Rectangulo extends Figura{

	public Rectangulo() {}
	
	//Implementaci贸n m茅todo abstracto de la clase padre
	@Override
	public void dibujar() {
		
		System.out.println("Dibujando un Rectangulo");
		
	}

}

public class Main {

	public static void main(String[] args) {
		
		
		Figura triang = new Triangulo();
		
		//Imprimir
		((Triangulo)triang).dibujar();
		
		Figura rectang = new Rectangulo();
		
		//Imprimir
		((Rectangulo)rectang).dibujar();
	

	}
	
}

C贸digo:

public abstract class Figura {
	public abstract void dibujate();
}

public class Triangulo extends Figura {
	@Override
	public void dibujate() {
		// TODO Auto-generated method stub
		
	}
}

Luego de creada la clase Figura de forma abstracta con su medo dibujate() abstracto, se debe crear la clase Triangulo que heredara de la clase abstracta Figura, y tendr谩 que implementar y sobre escribir el m茅todo abstracto dibujate():

public abstract class Figura{
public abstract void dibujate();
}

public class Triangulo extends Figura{
public void dibujate() {
//Codigo que dibuja la figura
}
}

Public abstract class Figura{
	public abstract void dibujate();
}

Public class Triangulo extends Figura{
	@Override
	public void dibujate(){
	// Proceso encargado de dibujar la figura
	}
}

La clase triangulo debe extender de figura y cambiar el m茅todo dibujate como abstracto. Luego se debe consumir para usar el metodo dibujate.
public abstract class figura { public abstract void dibujate(); }

public class triangulo extends figura (){
public void dibujate(){ systema.out.println(鈥榯riangulo鈥); }
}

public class circulo extends figura (){
public void dibujate(){ systema.out.println(鈥榗irculo鈥); }
}

public abstract class Figura(){
	public abstract void dibujate();
}

public class Triangulo extends Figura{
	
	@override
	public void dibujate(){
		/*
			Instrucciones...
		*/
	}
}

Es una mezcla entre interfaces y herencia, el codigo ser谩 propio de la clase de Triangulo.

public abstract class Figura(){
	
	public abstract void dibujate();
}

public class Triangulo extends Figura {
	
	@override
	public void dibujate(){
		//Lineas de codigo propias de Triangulo.
	}
}

public abstract class Figura {
public abstract void dibujar();
}

public class triangulo extends Figura {

@Override
public void dibujar() {

}

}

Respuesta:

public abstract class Figura {
	public abstract void dibujate();
}
public class Triangulo extends Figura {
	@Override
	public void dibujate(){

	}
}

La clace Figura hay que hacerla abstracta ,dentro de esa clace hacer un metodo abstracto llamada dibujate y luego implementar los metodos abstractos a la clace Hija

public abstract class Figura(){
public abstract void dibujate();
}

public class Triangulo extends Figura{

@override  // SOBREESCRIBE el metodo heredado de la clases abstracta 
public void dibujate(){
	/*
		Instrucciones...
	*/
}

}

Pues el diagrama ser铆a:

public abstract class Figura{
public abstrac void Dibubate();

}
public class Triangulo extends Figura{
public void Dibujate(){
}
}

Presento en sociedad mi humilde c贸digo para seguir con las actividades, en mi caso como el dominio son las figuras geom茅tricas arme un diagrama con visibilidad protected para que otra clase no pueda intervenir en este m茅todo.

public abstract class Figura {
    
    protected abstract void dibujate();
    
}

public class Triangulo extends Figura{
    
    @Override
    protected void dibujate(){
        //codigo que dibuja el triangulo, representado por un string en pantalla
        System.out.println("Dibujando un triangulo");
    }
    
}

Figura

public class Triangulo extends Figura {
@Override
public void dibujate() {
pintaTriangulo()
}

}

public abstract class Figura  {

	public abstract void dibujate();
}

public class Triangulo extends Figura {

	@Override
	public void dibujate() {
		/* Aqui va la l贸gica para dibujar tri谩ngulo */
	}
}

public abstract class Figura {

public abstract void dibujate();

}

public class Triangulo extends Figura {

@Override
public void dibujate() {
	/*C贸digo que dibuaj el tri谩ngulo */
}

}

public abstract class Figura {
public abstract void dibujate();
}

public class Triangulo extends Figura {

@Override
public void dibujate() {
	System.out.println("Instrucciones para dibujarse");
}	

}

public abstract class Figura {
    public abstract void dibujate();
}

public class Triangulo extends Figura {
    @Override
    public void dibujate(){
        //code draw here
    }
}

el m茅todo debe ser abstract para que sea obligatoria su implementaci贸n en la clase triangulo, y en la clase triangulo define los pasaos para que el m茅todo funcione

public abstract class Figura {
abstract void dibujate();
}

public class Triangulo extends Figura {

@override
public void dibujate() {
	System.out.println("Dibujando un tri谩ngulo");
}

}

Public abstract class Figura{

	Public abstract void dibujate();
}

Public class Triangulo extends Figura{

	@Override 
	Public void dibujate() {
	System.out.println("Dibujar un triangulo");
	}
}
public abstract class Figura {
public abstract void dibujate()
}

public class Triangulo extent figura{

public triangulo(){
}
public void dibujar(){
system.uot.println(鈥渄ijemos un triangulo鈥);
}

}

La clase Triangulo deber铆a extender de Figura y sobrescribir el m茅todo dibujate().

Triangulo tiene que heredar de la clase Figura y sobreescribir el m茅todo dibujate() (si fue declarado como abstracto en figura, claro).

public class Triangulo extends Figura{
 
@overrride
pubic void  dibujate(){

}

Deberiamos tener:

public abstract class Figura {
public abstract void dibujate();
//Demas metodos y atributos
}

public abstract class Triangulo extends Figura {
publi abstract void dibujate(){
//Do Somenthing
}
}

Hacer el metodo dibujate() abstracto en la clase Figura, para que la clase Triangulo deba de implementarlo

public abstract class Figura{
public abstract void dibujate();
}

public class Triangulo extends Figura{
public void dibujate(){
}
}

Una pregunta alguien sabe si se puede representar una clase abstracta de alguna forma en especifico con UML, o basta con representarla como una clase normal?

Tendria que utilizar la sobrecarga de metodos, pasandole los parametros que vayan de acorde con el trazo de un triangulo.

public abstract class Figura{
public abstract void dibujate();
}
public class Triangulo extends Figura{
@Override
public void dibujate() {
int base, altura;
//dibujar triangulo
}
}

public abstract class Figura
{
public abstract void dibujate();
}

public class Triangulo extends Figura
{
public void dibujate()
{
//C贸digo para dibujar el tri谩ngulo
}
}

public abstract void Figura {
//Define el m茅todo dibujate
abstract void dibujate();
}

public Triangulo extends Figura {
//Llama al metodo de figura
abstract void dibujate() {
//Operacion necesaria para Triangulo.
}

public abstrac class Figura{
public abstrac void dibujate();
}

public class Triangulo extends Figura{

	@Overrive
	public void dibujate(){
		//Code inside the abstrac method
	}

}

En este caso unicamente debo hacer la clase figure abstract e implementarla en la clase triangulo

public abstract class Figura{
public abstract void dibujate();
}

public class Triangulo extends Figura
{
public void dibujate(){
// redefines el metodo
}
}

La respuesta ya la dio la maestra en una de las clases anteriores. hacer el metodo dibujate() abstracto y sobrescribirlo enla clase Triangulo.

public abstract class Figura{

	public abstract void dibujar();
}

public class Cilindro extends Figura{

	@Override
	public void dibujar() {
		/* ... */
	}
}

Que el m茅todo dibujate() sea abstracto y que Triangulo extienda de Figura

public abstract class Figura {
public abstract void dibujate();
}

public class Triangulo extends Figura{
@Override
public void dibujate() {

}

}

Se debe crear la clase padre Figura con un m茅todo abstracto dibujate() y la clase hija triangulo debe heredar de Figura e implementar el m茅todo abstracto dibujate

public abstract class Figura{
	public abstract void Dibujate();
}
public abstract class Triangulo extends Figura{
	public void Dibujate(){
	//codigo para dibujar los triangulos
	}
}

package com.personal.figuras;

public class Triangulo implements Figura {

@Override
public void dibujate() {
	
}

}

public abstract class Figura () {
	private abstract void dibujate();
}

public class Triangulo extends Figura () {
	@Override
	public void dibujate() {
		//Logica Dibujate
	}
}
public abstract class Figura {

	public abstract void dibujate(){
   }
}

public class Triangulo extends Figura{
@Override
abstract void dibujate(){
/* L贸gica para dibujar tri谩ngulo */
   }
}

Para la clase Figura

public abstract class Figura { 

public abstract void dibujate();

}

Para la clase Triangulo

public class Triangulo extends Fugura {
	public void dibujate(){
	}
}

public abstractclassFigura{

public abstract void dibujate();

}

public classTrianguloextendsFigura{

@Override
public void dibujate() {
	/* L贸gica para dibujar tri谩ngulo */
}

}

public class Triangulo extends Figura{

	@Override
	public void dibujate(){

	}

}

public abstract class Figura{

	public abstract void dibujate();

}
<h1>Implementaci贸n de clases abstractas</h1>
  1. Establecer los par谩metros que recibir谩 el m茅todo 鈥渄ibujate鈥 de la clase abstracta figura, para que sean gen茅ricos y no genere inconvenientes con alg煤n tipo de figura que pueda surgir.

  2. La clase triangulo con pase a sus atributos y otros m茅todos internos sobre escribe el m茅todo 鈥渄ibujate鈥 con base a sus caracter铆sticas para poderse dibujar correctamente.

Lo que se tendr铆a que hacer seria crear la clase abstracta Figura y despu茅s crea la clase abstracta Triangulo la cual extender谩 de primera clase.

  • Aqui el diagrama
  • El codigo
public abstract class Figura {
    public abstract void dibujate();
}
public class Triangulo extends Figura {

  @Override
  public void dibujate() {
      // TODO Override dibujarte function
  }
}

public abstract class Figura{
public abstract void dibujante();
}


public class Triangulo extends Figura{
@Override
public void dibujante(){
//M茅todo
}
}

public abstract class Figura{

//el metodo como la clase deben ser abstractos

public abstract void dibujate();
}

public class Triangulo extends Figura{

/*Aqu铆 heredamos de la clase padre figura y como tiene metodos abstractos se deben implementar obligatoriamente*/

@Override
public void dibujate() {
}
}

Se ver铆a algo as铆

package com.neexvy.figura;

public abstract class Figura {
	
	public abstract void dibujate();

}
package com.neexvy.figura;

public class Triangulo extends Figura{
	
	private float base;
	private float altura;
	
	public Triangulo(float base, float altura) {
		super();
		this.base = base;
		this.altura = altura;
	}

	public float getBase() {
		return base;
	}

	public void setBase(float base) {
		this.base = base;
	}

	public float getAltura() {
		return altura;
	}

	public void setAltura(float altura) {
		this.altura = altura;
	}

	@Override
	public void dibujate() {
		// TODO Auto-generated method stub
		
	}

}

Crear铆a una clase abstracta Figura con el m茅todo dibujable() y la implementar铆a Triangulo.

La clase 鈥楾riangulo鈥 tendr铆a que heredar de 鈥楩igura鈥 y sobreescribir el m茅todo: 鈥榙ibujate鈥.

Heredar la clase Figura e implementar el m茅todo dibujate() de tal forma que realice la acci贸n deseada

p**ublic abstract class Figura{
**
public abstract void dibujate();

}

public class TrianguloextendsFigura{

@Override
public void dibujate() {

}

}

Deber铆a hacer que dibujate() sea abstracto y por lo tanto la clase Figura tambi茅n. Para implementar este m茅todo en la clase Triangulo debo extender de Figura y sobrescribir el m茅todo abstracto.

public abstract class Figura {
	public abstract void dibujate();
}

public class Triangulo extends Figura {
	@Override
	public void dibujate() {
		/*
		*  L贸gica necesaria para dibujar la Figura
		*  Triangulo. 
		*/
	}
}
public abstract class Figura{
	public abstract void dibujate();
}

public class Triangulo extends Figura{
	@Override
	public void dibujate() {
	}
}
public abstract class Figura {
	public abstract void dibujate();
}
//Heradamos de la clase figura y al heredar es obligatorio implementar las clases abstractas de la clase que se herada.
public class Triangulo extends Figura {
	@Override
	public void dibujate() {
	}
}
public abstract class Figura 
{
	public abstract void dibujate( );
}

public class Triangulo extends Figura 
{
	@Override
	public void dibujate( )
	{
		//TODO
	}
}

Triangulo debe extender la clase Figura y hacer override del metodo dibujate().

public abstract class Figura {
	public abstract void Dibujate();

}

public  class Triangulo {
	@Override
	public  void Dibujate(){
	// Implementacion
	}

}


<code>



<public abstrac class Figura{
public abstract void dibujante (){
}

}

public class Triangulo extends Figura{

public void dibujante(){
Sytem.oot.println("mi dibujo");
}

}>
public abstract class Figura{
	public abstract void dibujate();
}

public class Triangulo extends Figura{
	@override
	public void dibujate(){
		System.out.println("A Dibujar el triangulo");
	}
}
public abstract class Figure {    

    public abstract void dibujate();   
 
}

public class Triangulo extends Figure {

    @Override
    public void dibujate() {
        System.err.println("Dibujando un triangulo");
    }  

 }

Figura.java

public abstract class Figura {
	
	public abstract void Dibujate();
	
}

Triangulo.java

public class Triangulo extends Figura{

	@Override
	public void Dibujate() {
		float base;
		float algura;
		/*C贸digo para dibujar el tri谩ngulo*/
		//dibujarTriangulo();
	}

}
<public abstract class Figura{//clase abstracta y su m茅todo dibujate
public abstract void dibujate();
}
public class Triangulo extends Figura{//clase hija que hereda de Figura, junto con su m茅todo abstracto
@Override
public void dibujate();
} >
public abstract class Triangulo {

    public abstract void dibujate(){

        dibujate().dibujaLineaPerpendicular("45");
        dibujate().dibujaLineaPerpendicular("45");
        dibujate().dibujaLineaPerpendicular("45");
    }

}

public abstract class Figura{
	
	public abstract void dibujate();
	
}

public class Triangulo extends Figura{
	@Override
	public void dibujate(){
		// Contenido de metodo para clase Triangulo
	}
}

Hola, esta es mi respuesta al ejercicio:

En c贸digo

public abstract class Figura {
public abstract void dibujate()
}

public class Triangulo extends Figura {

@Override
	public void dibujate() {
		// Logica para dibujar el triangulo
}

En diagrama

Aunque tengo duda si el diagrama esta bien estructurado 驴le falta alg煤n elemento a este diagrama o tiene alg煤n error?

Muchas gracias de antemano

El m茅todo 鈥渄ibujate()鈥 debe ser abstracto y publico, extender la clase 鈥淭riangulo鈥 de 鈥淔ilm鈥 y as铆 se ve obligada a implementar el m茅todo 鈥渄ibujate()鈥.

public abstrac Figura {
public abstract void dibuje();
}
public class Triangulo extends Figura{
@Override
public void dibuje() {
}
}

Habr铆a que extender la clase Triangulo de Figura.

Clase abstracta Figura

public abstract class Figura{
    public abstract void dibujate();
}

Clase Triangulo

public classTriangulo extends Figura{)

	@Override
	public void dibujate() {
		/* TODO codigo para dibujar un tr谩ngulo */
	}
}
  • Se crea la clase abstracta Figura. Y se a帽ade el metodo abstracto 鈥渄ibujate鈥:
    public abtract class Figura{
    public abstrac void dibujate();

    }

  • Se crea la clase Triangulo que heredara de Figura, esto obligara a que la clase Triangulo tenga el metodo 鈥渄ibujate鈥. Y alli estara toda la implementaci贸n:

    public class Triangulo{
    @Override
    public void dibujate(){
    // TODO Auto-generated method stub
    }
    }

  • Se crea la clase abstracta Figura. Y se a帽ade el metodo abstracto 鈥渄ibujate鈥:
    public abtract class Figura{
    public abstrac void dibujate();

}

  • Se crea la clase Triangulo que heredara de Figura, esto obligara a que la clase Triangulo tenga el metodo 鈥渄ibujate鈥. Y alli estara toda la implementaci贸n:

public class Triangulo extends Figura{
@Override
public void dibujate(){
// TODO Auto-generated method stub
}
}

Aqu铆 mi soluci贸n

Figura.java


	public abstract Figura{
	
	public abstract  void dibujate();
}


Triangulo.java


public class Triangulo implements Figura {
	
	@Override
	public void dibujate(){

	/*C贸digo para dibujar un tri谩ngulo*/
		

		}
}

public abstract class Figura{

public abstract void dibujate();

}

public class Triangulo extends Figura{
@Override
public void dibujate(){
//dibujate
}
}

public abstract class Figura {
	public abstract void dibujate();
}
public class Triangulo extends Figura {
	
	@Override
	public void dibujate() {
		/*Aqu铆 defino como quiero dibujar el triangulo */
	}
	
}
// Clase Padre (Figura)
//**************************************
public abstract class Figura {
    public abstract void dibujate();
}
//**************************************
//Clase Hija (Tri谩ngulo)
//**************************************
public class Triangulo extends Figura{
    @Override
    public void dibujate() {  
    }   
}
//**************************************
<code>
public abstract class Figura {
    public abstract void dibujate();
}
public class Triangulo extends Figura{

    @Override
    public void dibujate() {
        for(int i=1;i<5;i++){
            switch(i){
                case 1: System.out.println("      * ");
                break;
                case 2: System.out.println("    **"+"**");
                break;
                case 3: System.out.println("  ****"+"****");
                break;
                case 4: System.out.println("******"+"******");
                break;
            }
        }
    }
    
}
public class Main {
    
    public static void main(String[] agrs){
        Triangulo triangulo = new Triangulo();
        triangulo.dibujate();
    }
}

La forma de sobre escribir m茅todos de una clase abstracta es heredando.?

public abstract class Figura {
    public abstract void dibujar();
}
public class Triangulo extends Figura{
    public void dibujar() {
        // Aqui va el codigo que necesitamos que haga en Dibuja
    }
}

la clase triangulo deber铆a extender a figura, aunq este tambi茅n deber铆a tener el m茅todo dibujate(), como abstracto , ya que cada tipo de triangulo deber铆a dibujarse de una manera diferente, ej: un escaleno seria distinto de un is贸sceles, deber铆amos tener clases hijas de triangulo, en las cuales SI implementar dibujate()

<code>
public abstract class Figura
{
public abstract void dibujate();
}



public abstract class Triangulo extends Figura{

public abstract void dibujate();
}



public class Escaleno extends Triangulo{

public void dibujate(){
// logica adecuada para el metodo
}
}
public abstract class Figura {
	public abstract void dibujate();
}

public class Triangulo extends Figura {
	
@Override
	public void dibujate() {
	}
}

La clase Triangulo tendr铆a que heredar de la clase Figura , de manera que pueda sobrescribir el m茅todo abstracto dibujate()

public abstract class Figura
{
public abstract void dibujate();
}

public class Triangulo extends Figura
{
	@Override
	public void dibujate()
	{
	// TODO Auto-generated method stub
	}
}

public abstract class Figura{
public abstract void dibujate();
}

public class Triangulo extends Figura{
@Override
public void dibujate(){
}
}

//Definir Clase abstracta Figure
public abstract class Figure {
	public abstract void draw();
}

public class Triangule extends Figure{
	public void draw(){
		//Insertar l貌gica de dibujo
	}
}