JavaRush /Java Blog /Random-ID /Apa itu pemrograman antarmuka? Ayo bermain arsitek

Apa itu pemrograman antarmuka? Ayo bermain arsitek

Dipublikasikan di grup Random-ID
Mungkin Anda pernah mendengar bahwa ada yang namanya “pemrograman antarmuka”. Saatnya untuk mengetahui hal ini lebih baik. Akan ada sedikit teks dan banyak kode (tanpa logika). Saya tidak dapat menemukan kapan antarmuka pertama kali muncul. Itu mungkin sudah lama sekali, dan Internet melupakannya. Bagaimanapun. Ide antarmukanya sederhana: jelaskan apa yang akan kami lakukan tanpa menjelaskan secara detail. Itu. tidak masalah bagaimana Anda melakukannya, yang penting adalah apa yang Anda lakukan. Namun setelah saya menulis artikel ini, saya menemukan artikel bagus tentang topik serupa di sini, di grup. Klik tautannya dan baca, semakin banyak semakin baik! Isi:

Mengapa hal ini perlu?

Jika kode terdiri dari satu kelas, hal ini tidak terlalu diperlukan. Namun ketika kelas harus berinteraksi satu sama lain, dan jumlahnya melebihi beberapa lusin, maka inilah saatnya memikirkan tentang desain. Pertama, pikirkan keseluruhan struktur proyek dari atas ke bawah (dari abstraksi maksimal hingga implementasi). Jika beberapa orang sedang mengerjakan sebuah proyek, maka akan sangat mudah untuk menyetujui, menjelaskan antarmuka interaksi kelas, kemudian membongkar antarmuka ini dan mulai mengimplementasikannya. Hasilnya adalah paralelisme tugas yang baik; tugas-tugas tersebut mudah dibagi karena semua orang telah menyetujui segalanya, tapi tidak ada yang peduli dengan detailnya.

Apa manfaatnya bagi pengembang?

Pengembang tidak memerlukan implementasi kelas. Ini berarti bahwa setelah semua orang setuju, dia mengambil antarmuka yang dia butuhkan dan menggunakannya. Implementasinya akan diganti jika sudah siap. Izinkan saya menunjukkan contoh saya, dan kemudian kita akan berbicara lebih jauh. Saya memutuskan untuk menulis proyek mesin kasir kecil. Dia akan membantu memilih tiket, menjualnya, memberikan uang dan mengambil uang dari bank, menukarkan uang bagi yang datang dalam jumlah banyak. Jadi, embusan arsitektural saya: PS tidak perlu menyalin dan membuat struktur, demi kemalasan saya telah melampirkan arsip dengan kode di akhir artikel ;) Struktur:
Apa itu pemrograman antarmuka?  Ayo bermain arsitek - 1
Sekelompok 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;
    }
}
Mesin kasir adalah bagian terpenting:
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);
}
Hal pertama yang menarik perhatian pengembang yang tidak siap adalah javadoc. Meskipun, mereka mungkin familiar bagi pengembang yang tidak terlatih. Beberapa orang kadang-kadang malas, tapi kode saya sudah bagus, tanpa dokumen ;) Bahkan sekarang saya tidak ingin menulis dokumen tentang beberapa hal. Nah, mengapa menulis ke transportasi bahwa itu adalah transportasi? Mari kita tinggalkan itu untuk nanti! Saya mencoba menjelaskan dalam dokumen semua yang diperlukan. Sekarang saya akan menjelaskan mengapa lebih mudah menulis kode dengan cara ini. Begini, sekarang saya bisa memberi Anda antarmuka CashBoxdan meminta Anda untuk mengimplementasikannya. Bukankah dia sulit? Ditambah lagi, perilaku yang diperlukan dijelaskan dalam dokumentasi. Anda tidak perlu menunggu seseorang untuk menulis model atau apa pun. Anda mengambil model antarmuka dan mulai bekerja berdasarkan model tersebut. Sekarang Anda sedang memprogram dalam antarmuka, selamat. Dan sekarang yang utama. Saya dapat memberi Anda tugas untuk mengimplementasikannya CashBox, serta orang lain, sehingga kami memiliki 2 implementasi. Misalnya, kantor tiket pinggiran kota dan internasional. Anda akan dapat menulis kode secara paralel dan setiap anggota tim yang akan menulis kode berdasarkan CashBoxsudah dapat memulai dan membangun antarmuka. Sangat nyaman. Multitasking, persetan dengan itu. Tautan ke kode di Google Drive -> di sini
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION