JavaRush /Java Blog /Random-TL /Ano ang interface programming? Maglaro tayo ng architect

Ano ang interface programming? Maglaro tayo ng architect

Nai-publish sa grupo
Marahil ay narinig mo minsan na mayroong isang bagay tulad ng "interface programming". Panahon na para mas kilalanin ito. Magkakaroon ng kaunting teksto at maraming code (walang lohika). Hindi ko mahanap kung kailan lumitaw ang mga unang interface. Malamang matagal na ang nakalipas, at nakalimutan na ito ng Internet. Anyway. Ang ideya ng interface ay simple: ilarawan kung ano ang gagawin namin nang hindi naglalagay ng mga detalye. Yung. hindi mahalaga kung paano mo ito ginagawa, mahalaga kung ano ang iyong ginagawa. Ngunit pagkatapos kong isulat ang artikulong ito, nakakita ako ng isang mahusay sa isang katulad na paksa dito sa mga grupo. Mag-click sa link at basahin, mas marami ang mas mahusay! Nilalaman:

Bakit kailangan ito?

Kapag ang code ay binubuo ng isang klase, hindi talaga ito kailangan. Ngunit kapag ang mga klase ay dapat makipag-ugnayan sa isa't isa, at ang kanilang bilang ay lumampas sa ilang dosena, pagkatapos ay oras na upang isipin ang tungkol sa disenyo. Una, isipin ang buong istraktura ng proyekto mula sa itaas hanggang sa ibaba (mula sa maximum na abstraction hanggang sa pagpapatupad). Kung maraming tao ang nagtatrabaho sa isang proyekto, kung gayon ito ay lubos na maginhawa upang sumang-ayon, ilarawan ang mga interface ng pakikipag-ugnayan ng mga klase, pagkatapos ay i-disassemble ang mga interface na ito at simulan ang pagpapatupad ng mga ito. Ang resulta ay magandang paralelismo ng mga gawain; madali silang hatiin, dahil lahat ay sumang-ayon sa lahat, ngunit walang nagmamalasakit sa mga detalye.

Ano ang ibinibigay nito sa developer?

Hindi kailangan ng developer ng pagpapatupad ng klase. Nangangahulugan ito na pagkatapos sumang-ayon ang lahat, kinukuha niya ang mga interface na kailangan niya at ginagamit ang mga ito. Ang pagpapatupad ay papalitan kapag ito ay handa na. Hayaang ipakita ko sa iyo ang aking halimbawa, at pagkatapos ay mag-uusap pa tayo. Nagpasya akong magsulat ng isang maliit na proyekto ng cash register. Siya ay tutulong sa pagpili ng mga tiket, ibenta ang mga ito, bigyan ng pera at kumuha ng pera mula sa bangko, magpapalit ng pera para sa mga dumarating sa maraming bilang. Kaya, ang aking pagbuga ng arkitektura: PS hindi na kailangang kopyahin at lumikha ng isang istraktura, alang-alang sa katamaran ay nag-attach ako ng isang archive na may code sa dulo ng artikulo ;) Structure :
Ano ang interface programming?  Maglaro tayo ng architect - 1
Isang grupo ng mga modelo:
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 {
}
Exception pair:
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;
    }
}
Ang cash register ay ang pinakamahalagang bahagi:
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);
}
Ang unang bagay na nakakakuha ng mata ng isang hindi handa na developer ay javadoc. Bagaman, malamang, pamilyar sila sa isang hindi sanay na developer. Ang ilang mga tao ay tamad kung minsan, ngunit ang aking code ay mabuti na, walang dokumento ;) Kahit ngayon ay hindi ko nais na magsulat ng isang dokumento tungkol sa ilang mga bagay. Well, bakit sumulat sa transportasyon na ito ay transportasyon? Iwanan na natin yan mamaya! Sinubukan kong ilarawan sa mga dokumento ang lahat ng kailangan. Ngayon ay ipapaliwanag ko kung bakit mas maginhawang magsulat ng code sa ganitong paraan. Tingnan mo, ngayon ay mabibigyan kita ng interface CashBoxat hilingin sa iyo na ipatupad ito. Hindi ba siya mahirap? Dagdag pa ang kinakailangang pag-uugali ay inilarawan sa dokumentasyon. Hindi mo na kailangang maghintay para sa isang tao na magsulat ng mga modelo o anumang bagay. Kumuha ka ng mga modelo ng interface at magsimulang magtrabaho batay sa mga ito. Ngayon ay nagprograma ka na sa mga interface, binabati kita. At ngayon ang pangunahing bagay. Maaari kong ibigay sa iyo ang gawain na ipatupad ang CashBox, pati na rin ang ibang tao, upang magkaroon tayo ng 2 pagpapatupad. Halimbawa, suburban at international ticket office. Magagawa mong magsulat ng code nang magkatulad at sinumang miyembro ng koponan na magsusulat ng code batay sa CashBoxmaaari nang magsimula at bumuo sa interface. Ito ay napaka komportable. Multitasking, to hell with it. Mag-link sa code sa Google Drive -> dito
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION