Skip to content
This repository was archived by the owner on Jul 23, 2024. It is now read-only.
This repository was archived by the owner on Jul 23, 2024. It is now read-only.

ej5 TP4 #5

@romamati

Description

@romamati

Buenas!Tengo una duda sobre la reolución del ejercicio.
En este la consigna es la siguiente:
HTML es un lenguaje utilizado en el desarrollo de páginas web. Permite describir la estructura de un documento, así como darle formato. Para hacer esto, utiliza “etiquetas” que permiten indicar el formato a aplicar. A continuación se describen algunas de estas etiquetas:
b: Permite definir un texto en negrita. Ejemplo: hola
i: Permite definir un texto en cursiva. Ejemplo: hola
a: Permite definir un enlace, agregando un atributo que indica la página a la cual se desea ir al hacer clic en el enlace. Ejemplo: Ir a la página del ITBA
Estas etiquetas pueden anidarse para combinar distintos formatos. Por ejemplo, el siguiente texto HTML muestra la cadena de texto “hola” en negrita y en cursiva: hola. El siguiente código hace lo mismo: hola.
Se cuenta con una interfaz HTMLText que representa un texto HTML y provee un método para obtener el código fuente.

public interface HTMLText {

String source();

}

¿Por qué no se puede incluir en la interfaz un método default con la implementación del método toString()?
Implementar todo lo necesario para que con el siguiente programa de prueba

public class HTMLTester {

public static void main(String[] args) {
PlainText text = new PlainText("Hola");
HTMLText boldText = new BoldText(text);
HTMLText italicText = new ItalicText(text);
System.out.println(boldText);
System.out.println(italicText);
HTMLText boldItalicText = new BoldText(italicText);
System.out.println(boldItalicText);
text.setText("ITBA");
System.out.println(boldText);
System.out.println(italicText);
System.out.println(boldItalicText);
HTMLText linkText = new LinkText(text, "itba.edu.ar");
HTMLText linkBoldText1 = new LinkText(boldItalicText, "itba.edu.ar");
HTMLText linkBoldText2 = new BoldText(linkText);
System.out.println(linkText);
System.out.println(linkBoldText1);
System.out.println(linkBoldText2);
text.setText("Ejemplo");
System.out.println(linkBoldText1);
System.out.println(linkBoldText2);
}

}

se obtenga la salida siguiente salida:

Hola
Hola
Hola
ITBA
ITBA
ITBA
ITBA
ITBA
ITBA
Ejemplo
Ejemplo

Y para resolverlo, en las soluciones se propone crear una clase abstracta "BasicText" que implementa a la interface HTMLText y que solo sobreescribe al metodo toString() mientras que al metodo source() lo "patea" para que lo implementen sus clases hijas.
Entre las clases hijas de BasicText se encuentra FormatText, la cual a su vez tiene como hija por ejemplo a BoldText.

Mi duda se presenta por lo siguiente:
En la clase FormatText se sobreescribe al metodo source utilizando la variable "element" de tipo HTMLText de la siguiente manera:
@OverRide
public String source()
{
return "<%s>%s</%s>".formatted(format,element.source(),format);
}

Mientras que por ejemplo la clase BoldText no sobreescribe a source() y lo que yo no entiendo es cuál es el source() que se ejecuta cuando "element" es un objeto de tipo BoldText porque lo que entiendo que sucede es que al no encontrar source() en BoldText la va a buscar a su padre (FormatText) pero en la sobreescritura de source() del padre tambien hace la invocacion element.souce() y eso nos lleva nuevamente a la clase BoldText asi que no entiendo cual seria el source() que se termina implementando si nunca se lo termina de definir en ningun lado.

Ojalá haya quedado clara mi duda! Sino la pregunto mejor de forma presencial.
Desde ya muchas gracias!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions