JavaRush /Blog Java /Random-ES /¿Qué es la programación de interfaces? juguemos al arquit...

¿Qué es la programación de interfaces? juguemos al arquitecto

Publicado en el grupo Random-ES
Quizás alguna vez hayas escuchado que existe algo llamado “programación de interfaz”. Es hora de conocer esto mejor. Habrá poco texto y mucho código (sin lógica). No pude encontrar cuándo aparecieron las primeras interfaces. Probablemente fue hace mucho tiempo e Internet se olvidó de ello. De todos modos. La idea de la interfaz es sencilla: describir lo que haremos sin entrar en detalles. Aquellos. No importa cómo lo hagas, importa lo que hagas. Pero después de escribir este artículo, encontré uno bueno sobre un tema similar aquí en grupos. Haz clic en el enlace y lee, ¡cuanto más mejor! Contenido:

¿Por qué es esto necesario?

Cuando el código consta de una clase, esto no es realmente necesario. Pero cuando las clases deben interactuar entre sí y su número supera las decenas, entonces llega el momento de pensar en el diseño. Primero, piense en toda la estructura del proyecto de arriba a abajo (desde la máxima abstracción hasta la implementación). Si varias personas están trabajando en un proyecto, entonces es muy conveniente ponerse de acuerdo, describir las interfaces de interacción de las clases, luego desmontar estas interfaces y comenzar a implementarlas. El resultado es un buen paralelismo de tareas; son fáciles de dividir, porque Todos están de acuerdo en todo, pero a nadie le importan los detalles.

¿Qué le aporta esto al desarrollador?

El desarrollador no necesita una implementación de la clase. Esto significa que después de que todos estén de acuerdo, toma las interfaces que necesita y las utiliza. La implementación será sustituida cuando esté lista. Déjame mostrarte mi ejemplo y luego hablaremos más. Decidí escribir un pequeño proyecto de caja registradora. Ella ayudará a elegir billetes, venderlos, dar y recibir dinero del banco, cambiar dinero a los que vengan en gran número. Entonces, mi exhalación arquitectónica: PD: no es necesario copiar y crear una estructura, por pereza he adjuntado un archivo con código al final del artículo ;) Estructura :
¿Qué es la programación de interfaces?  Juguemos al arquitecto - 1
Un montón de modelos:
package cashbox.model;

public enum Currency {
    USD,
    EUR,
    RUR
}
package cashbox.model;

public interface Direction {
    /**
     * @return город Cómo цель направления, куда едем/летим/двигаемся
     */
    String getCity();
}
package cashbox.model;

/**
 * модель денег
 */
public interface Money {
    /**
     * @return тип валюты
     */
    Currency getCurrency();

    /**
     * @return сумма денег
     */
    long getAmount();
}
package cashbox.model;

public interface Ticket {
    /**
     * @return направление куда двигаемся
     */
    Direction getDirection();

    /**
     * @return цена билета
     */
    Money getPrice();

    /**
     * @return транспорт на котором передвигаемся
     */
    Transport getTransport();
}
package cashbox.model;

public interface Transport {
}
Par de excepciones:
package cashbox.exception;

public class NoSoMuchMoneyException extends RuntimeException {
}
package cashbox.exception;

import cashbox.model.Money;

public class NoSuchCurrencyException extends RuntimeException {
    private Money money;

    public NoSuchCurrencyException(Money money) {
        this.money = money;
    }

    public NoSuchCurrencyException(String message, Money money) {
        super(message);
        this.money = money;
    }

    public Money getMoney() {
        return money;
    }
}
La caja registradora es la parte más importante:
package cashbox;

import cashbox.exception.NoSoMuchMoneyException;
import cashbox.exception.NoSuchCurrencyException;
import cashbox.model.*;
import javafx.util.Pair;

import java.util.List;
import java.util.Map;

public interface CashBox {

    /**
     * @param direction направление билета
     * @return Стоимость проезда по видам транспорта
     */
    Map<Transport, Money> getPrice(Direction direction);

    /**
     * Продать билет
     * @param money деньги за билет
     * @return пару из билета и сдачи
     */
    Pair<Ticket, Money> sellTicket(Money money);

    /**
     * обмен валюты
     * @param moneyFrom валюта, которую передает клиент
     * @param currency валюта, которую клиент хочет получить, тут будет учитываться только тип валюты,
     *                 количество будет проигнорировано
     * @return Требуемая валюта
     * @throws NoSoMuchMoneyException если недостаточно денег в кассе для обмена
     * @throws NoSuchCurrencyException если нет такой валюты, отсутствующая валюта передается Cómo атрибут
     */
    Money change(Money moneyFrom, Currency currency) throws NoSoMuchMoneyException, NoSuchCurrencyException;

    /**
     * Инкасация - отправить деньги в банк
     * @param money - сумма и валюта, можно передать несколько
     */
    void sendToBank(Money... money);

    /**
     * Запрос денег из банка
     * @param money - сумма и валюта необходимая кассе
     */
    void requestFromBank(Money... money);

    /**
     * Подбор билета.
     * В метод передается либо одно, либо другое, либо вместе.
     * Если оба атрибута null значит вызов некорректный
     * @param transport - желаемый транспорт
     * @param direction - желаемое направление
     * @return список подходящих билетов
     */
    List<Ticket> chooseBy(Transport transport, Direction direction);
}
Lo primero que llama la atención de un desarrollador no preparado es javadoc. Aunque, probablemente, le resulten familiares a un desarrollador no capacitado. Algunas personas a veces son vagas, pero mi código ya es bueno, sin un documento ;) Incluso ahora no quiero escribir un documento sobre algunas cosas. Bueno, ¿por qué escribir al transporte que es transporte? ¡Dejemos eso para más tarde! Intenté describir en documentos todo lo que se necesitaba. Ahora explicaré por qué es más conveniente escribir código de esta manera. Mira, ahora puedo darte una interfaz CashBoxy pedirte que la implementes. ¿No es difícil? Además, el comportamiento requerido se describe en la documentación. No tendrás que esperar a que alguien escriba modelos ni nada más. Tomas modelos de interfaz y comienzas a trabajar en base a ellos. Ahora estás programando en interfaces, felicidades. Y ahora lo principal. Puedo darte la tarea de implementar CashBox, así como a otra persona, para que tengamos 2 implementaciones. Por ejemplo, taquillas de cercanías e internacionales. Podrá escribir código en paralelo y cualquier miembro del equipo que escriba código basado en él CashBoxya podrá comenzar y desarrollar la interfaz. Es muy cómodo. Multitarea, al diablo con esto. Enlace al código en Google Drive -> aquí
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION