JavaRush /Blog Jawa /Random-JV /Apa pemrograman antarmuka? Ayo dadi arsitek

Apa pemrograman antarmuka? Ayo dadi arsitek

Diterbitake ing grup
Mungkin sampeyan tau krungu yen ana "pemrograman antarmuka". Wektu kanggo ngerti iki luwih apik. Bakal ana teks cilik lan akeh kode (tanpa logika). Aku ora bisa nemokake nalika antarmuka pisanan muncul. Mesthine wis suwe banget, lan Internet lali babagan iki. Oalah. Ide antarmuka iku prasaja: njlèntrèhaké apa sing bakal kita lakoni tanpa nerangake rincian. Sing. ora ketompo carane sampeyan nindakake, sing penting apa sing sampeyan lakoni. Nanging sawise aku nulis artikel iki, aku nemokake sing apik babagan topik sing padha ing grup iki. Klik ing link lan maca, luwih apik! Isi:

Yagene iki perlu?

Nalika kode kasusun saka siji kelas, iki ora perlu. Nanging nalika kelas kudu sesambungan karo saben liyane, lan nomer sing ngluwihi sawetara rolas, iku wektu kanggo mikir bab desain. Pisanan, pikirake kabeh struktur proyek saka ndhuwur nganti ngisor (saka abstraksi maksimal nganti implementasine). Yen sawetara wong nggarap proyek, mula trep banget kanggo setuju, njlèntrèhaké antarmuka interaksi kelas, banjur mbongkar antarmuka kasebut lan miwiti ngetrapake. Asil punika paralelisme apik saka tugas; padha gampang kanggo dibagi, amarga kabeh wong wis setuju kabeh, nanging ora ana sing peduli babagan rincian.

Apa iki menehi pangembang?

Pangembang ora perlu implementasine saka kelas. Iki tegese sawise kabeh wis setuju, dheweke njupuk antarmuka sing dibutuhake lan digunakake. Implementasine bakal diganti yen wis siyap. Ayo kula nuduhake conto, banjur kita bakal ngomong luwih. Aku mutusaké kanggo nulis project awis cilik. Dheweke bakal mbantu milih tiket, ngedol, menehi dhuwit lan njupuk dhuwit saka bank, ngganti dhuwit kanggo wong-wong sing teka ing jumlah gedhe. Dadi, exhalation arsitektur: PS ora perlu kanggo nyalin lan nggawe struktur, kanggo kesed aku wis masang arsip karo kode ing mburi artikel;) Struktur:
Apa pemrograman antarmuka?  Ayo dadi arsitek - 1
Akeh 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;
    }
}
Kasir minangka bagean sing 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);
}
Babagan pisanan sing narik kawigaten para pangembang sing ora siap yaiku javadoc. Sanajan, mbokmenawa, dheweke kenal karo pangembang sing ora dilatih. Sawetara wong kesed kadhangkala, nanging kodeku wis apik, tanpa dokumen;) Malah saiki aku ora pengin nulis dokumen babagan sawetara perkara. Nah, kenapa nulis kanggo transportasi yen iku transportasi? Ayo ditinggal mengko! Aku nyoba kanggo njlèntrèhaké ing dokumen kabeh sing dibutuhake. Saiki aku bakal nerangake kenapa luwih trep kanggo nulis kode kanthi cara iki. Deleng, saiki aku bisa menehi antarmuka CashBoxlan njaluk sampeyan ngetrapake. Apa dheweke ora angel? Plus prilaku sing dibutuhake diterangake ing dokumentasi. Sampeyan ora kudu ngenteni wong nulis model utawa liya-liyane. Sampeyan njupuk model antarmuka lan miwiti digunakake adhedhasar mau. Saiki sampeyan lagi program ing antarmuka, Sugeng. Lan saiki sing utama. Aku bisa menehi tugas kanggo ngleksanakake CashBox, uga wong liya, supaya kita duwe 2 implementasine. Contone, kantor tiket suburban lan internasional. Sampeyan bakal bisa nulis kode kanthi podo karo lan anggota tim sing bakal nulis kode adhedhasar CashBoxbisa miwiti lan mbangun antarmuka. Iku banget nyaman. Multitasking, kanggo neraka karo. Link menyang kode ing Google Drive -> kene
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION