JavaRush /Blog Java /Random-MS /Apakah pengaturcaraan antara muka? Jom main arkitek

Apakah pengaturcaraan antara muka? Jom main arkitek

Diterbitkan dalam kumpulan
Mungkin anda pernah mendengar bahawa terdapat perkara seperti "pengaturcaraan antara muka". Sudah tiba masanya untuk mengenali perkara ini dengan lebih baik. Akan ada sedikit teks dan banyak kod (tanpa logik). Saya tidak dapat mencari apabila antara muka pertama muncul. Ia mungkin sudah lama dahulu, dan Internet melupakannya. Bagaimanapun. Idea antara muka adalah mudah: terangkan apa yang akan kami lakukan tanpa butiran terperinci. Itu. tidak kira bagaimana anda melakukannya, yang penting apa yang anda lakukan. Tetapi selepas saya menulis artikel ini, saya menemui artikel yang bagus mengenai topik yang sama di sini dalam kumpulan. Klik pada pautan dan baca, lebih banyak lagi bagus! Kandungan:

Mengapa ini perlu?

Apabila kod itu terdiri daripada satu kelas, ini tidak semestinya diperlukan. Tetapi apabila kelas mesti berinteraksi antara satu sama lain, dan bilangan mereka melebihi beberapa dozen, maka sudah tiba masanya untuk memikirkan reka bentuk. Pertama, fikirkan keseluruhan struktur projek dari atas ke bawah (dari abstraksi maksimum kepada pelaksanaan). Jika beberapa orang sedang mengusahakan projek, maka adalah sangat mudah untuk bersetuju, menerangkan antara muka interaksi kelas, kemudian buka antara muka ini dan mula melaksanakannya. Hasilnya adalah keselarian tugas yang baik; mereka mudah dibahagikan, kerana semua orang telah bersetuju dalam segala-galanya, tetapi tiada siapa yang mengambil berat tentang butirannya.

Apakah yang diberikan ini kepada pemaju?

Pembangun tidak memerlukan pelaksanaan kelas. Ini bermakna selepas semua orang bersetuju, dia mengambil antara muka yang dia perlukan dan menggunakannya. Pelaksanaan akan digantikan apabila ia siap. Biar saya tunjukkan contoh saya kepada anda, dan kemudian kita akan bercakap lebih lanjut. Saya memutuskan untuk menulis projek daftar tunai kecil. Dia akan membantu memilih tiket, menjualnya, memberi wang dan mengambil wang dari bank, menukar wang untuk mereka yang datang beramai-ramai. Jadi, hembusan seni bina saya: PS tidak perlu menyalin dan mencipta struktur, demi kemalasan saya telah melampirkan arkib dengan kod di hujung artikel ;) Struktur:
Apakah pengaturcaraan antara muka?  Jom main arkitek - 1
Sekumpulan model:
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 {
}
Pasangan pengecualian:
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;
    }
}
Daftar tunai adalah bahagian yang paling penting:
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);
}
Perkara pertama yang menarik perhatian pembangun yang tidak bersedia ialah javadoc. Walaupun, mungkin, mereka biasa dengan pembangun yang tidak terlatih. Sesetengah orang kadang-kadang malas, tetapi kod saya sudah bagus, tanpa dokumen ;) Sekarang pun saya tidak mahu menulis dokumen tentang beberapa perkara. Nah, mengapa menulis kepada pengangkutan bahawa ia adalah pengangkutan? Mari tinggalkan itu untuk kemudian! Saya cuba menerangkan dalam dokumen semua yang diperlukan. Sekarang saya akan menerangkan mengapa lebih mudah untuk menulis kod dengan cara ini. Lihat, sekarang saya boleh memberi anda antara muka CashBoxdan meminta anda untuk melaksanakannya. Susah kan dia? Selain itu, tingkah laku yang diperlukan diterangkan dalam dokumentasi. Anda tidak perlu menunggu seseorang menulis model atau perkara lain. Anda mengambil model antara muka dan mula bekerja berdasarkannya. Sekarang anda memprogramkan dalam antara muka, tahniah. Dan sekarang perkara utama. Saya boleh memberi anda tugas untuk melaksanakan CashBox, serta orang lain, supaya kami mempunyai 2 pelaksanaan. Contohnya, pejabat tiket pinggir bandar dan antarabangsa. Anda akan dapat menulis kod secara selari dan mana-mana ahli pasukan yang akan menulis kod berdasarkan CashBoxsudah boleh mula dan membina antara muka. Ia sangat selesa. Multitasking, to hell with it. Pautan ke kod di Google Drive -> di sini
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION