JavaRush /Java Blog /Random-IT /Cos'è la programmazione dell'interfaccia? Giochiamo all'a...

Cos'è la programmazione dell'interfaccia? Giochiamo all'architetto

Pubblicato nel gruppo Random-IT
Forse una volta hai sentito che esiste una cosa come la "programmazione dell'interfaccia". È ora di conoscerlo meglio. Ci sarà poco testo e molto codice (senza logica). Non sono riuscito a trovare quando sono apparse le prime interfacce. Probabilmente è passato molto tempo e Internet se ne è dimenticato. Comunque. L'idea dell'interfaccia è semplice: descrivere cosa faremo senza entrare nei dettagli. Quelli. non importa come lo fai, importa cosa fai. Ma dopo aver scritto questo articolo, ne ho trovato uno interessante su un argomento simile qui nei gruppi. Clicca sul link e leggi, più sono, meglio è! Contenuto:

Perché è necessario?

Quando il codice è costituito da una classe, ciò non è realmente necessario. Ma quando le classi devono interagire tra loro e il loro numero supera diverse decine, allora è il momento di pensare al design. Innanzitutto, pensa all'intera struttura del progetto da cima a fondo (dalla massima astrazione all'implementazione). Se più persone lavorano a un progetto, è molto conveniente concordare, descrivere le interfacce di interazione delle classi, quindi smontare queste interfacce e iniziare a implementarle. Il risultato è un buon parallelismo dei compiti; sono facili da dividere, perché tutti sono d'accordo su tutto, ma a nessuno interessano i dettagli.

Cosa offre questo allo sviluppatore?

Lo sviluppatore non ha bisogno di un'implementazione della classe. Ciò significa che, dopo che tutti sono d'accordo, prende le interfacce di cui ha bisogno e le utilizza. L'implementazione verrà sostituita quando sarà pronta. Lascia che ti mostri il mio esempio e poi parleremo ulteriormente. Ho deciso di scrivere un piccolo progetto di registratore di cassa. Aiuterà a scegliere i biglietti, a venderli, a dare e prendere soldi dalla banca, a cambiare soldi per coloro che arrivano in gran numero. Quindi, la mia espirazione architettonica: PS non è necessario copiare e creare una struttura, per pigrizia ho allegato un archivio con codice alla fine dell'articolo ;) Struttura :
Cos'è la programmazione dell'interfaccia?  Giochiamo all'architetto - 1
Un sacco di modelli:
package cashbox.model;

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

public interface Direction {
    /**
     * @return город How цель направления, куда едем/летим/двигаемся
     */
    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 {
}
Coppia di eccezioni:
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;
    }
}
Il registratore di cassa è la parte più 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 если нет такой валюты, отсутствующая валюта передается How атрибут
     */
    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);
}
La prima cosa che attira l'attenzione di uno sviluppatore impreparato è javadoc. Sebbene, probabilmente, siano familiari a uno sviluppatore inesperto. Alcune persone a volte sono pigre, ma il mio codice è già buono, senza un documento ;) Anche adesso non voglio scrivere un documento su alcune cose. Ebbene, perché scrivere ai trasporti che si tratta di trasporti? Lasciamo questo per dopo! Ho provato a descrivere nei documenti tutto ciò che era necessario. Ora ti spiegherò perché è più conveniente scrivere il codice in questo modo. Guarda, ora posso darti un'interfaccia CashBoxe chiederti di implementarla. Non è difficile? Inoltre il comportamento richiesto è descritto nella documentazione. Non dovrai aspettare che qualcuno scriva modelli o altro. Prendi i modelli di interfaccia e inizi a lavorare sulla base di essi. Ora stai programmando nelle interfacce, congratulazioni. E ora la cosa principale. Posso dare a te il compito di implementare CashBox, così come a qualcun altro, in modo da avere 2 implementazioni. Ad esempio, biglietteria suburbana e internazionale. Sarai in grado di scrivere codice in parallelo e qualsiasi membro del team che scriverà codice basato su CashBoxpotrà già iniziare e sviluppare l'interfaccia. È molto comodo Multitasking, al diavolo tutto. Link al codice su Google Drive -> qui
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION