JavaRush /จาวาบล็อก /Random-TH /การเขียนโปรแกรมอินเทอร์เฟซคืออะไร? มาเล่นสถาปนิกกันเถอะ

การเขียนโปรแกรมอินเทอร์เฟซคืออะไร? มาเล่นสถาปนิกกันเถอะ

เผยแพร่ในกลุ่ม
บางทีคุณอาจเคยได้ยินว่ามีสิ่งที่เรียกว่า "การเขียนโปรแกรมอินเทอร์เฟซ" ถึงเวลาที่จะทำความรู้จักสิ่งนี้ให้ดีขึ้นแล้ว จะมีข้อความน้อยและโค้ดเยอะ (ไม่มีตรรกะ) ฉันหาไม่เจอว่าอินเทอร์เฟซแรกปรากฏขึ้นเมื่อใด มันอาจจะนานมาแล้วและอินเทอร์เน็ตก็ลืมมันไป ถึงอย่างไร. แนวคิดของอินเทอร์เฟซนั้นเรียบง่าย: อธิบายสิ่งที่เราจะทำโดยไม่ต้องลงรายละเอียด เหล่านั้น. มันไม่สำคัญว่าคุณจะทำอย่างไร มันสำคัญว่าคุณทำอะไร แต่หลังจากที่ฉันเขียนบทความนี้ ฉันพบบทความดีๆ ในหัวข้อที่คล้ายกันที่นี่เป็นกลุ่ม คลิกที่ลิงค์แล้วอ่านยิ่งดี! เนื้อหา:

เหตุใดจึงจำเป็น?

เมื่อโค้ดประกอบด้วยคลาสเดียว สิ่งนี้ก็ไม่จำเป็นจริงๆ แต่เมื่อคลาสต้องมีปฏิสัมพันธ์กันและมีจำนวนเกินหลายสิบคลาส ก็ถึงเวลาคิดเกี่ยวกับการออกแบบ ขั้นแรก ให้คิดผ่านโครงสร้างทั้งหมดของโครงการจากบนลงล่าง (จากสิ่งที่เป็นนามธรรมสูงสุดไปจนถึงการนำไปปฏิบัติ) หากมีหลายคนกำลังทำงานในโครงการ จะสะดวกมากที่จะตกลง อธิบายอินเทอร์เฟซการโต้ตอบของคลาส จากนั้นแยกส่วนอินเทอร์เฟซเหล่านี้และเริ่มนำไปใช้งาน ผลลัพธ์ที่ได้คือความเท่าเทียมที่ดีของงานซึ่งแบ่งได้ง่ายเพราะว่า ทุกคนเห็นพ้องต้องกันทุกเรื่องแต่ไม่มีใครใส่ใจในรายละเอียด

สิ่งนี้ให้อะไรกับนักพัฒนา?

นักพัฒนาไม่จำเป็นต้องมีการใช้งานคลาส ซึ่งหมายความว่าหลังจากที่ทุกคนเห็นพ้องต้องกันแล้ว เขาก็นำอินเทอร์เฟซที่ต้องการไปใช้ การใช้งานจะถูกทดแทนเมื่อพร้อม ผมขอแสดงตัวอย่างให้คุณดู แล้วเราจะพูดคุยกันต่อไป ฉันตัดสินใจเขียนโครงการเครื่องบันทึกเงินสดขนาดเล็ก เธอจะช่วยเลือกตั๋ว ขาย ให้เงิน และเอาเงินจากธนาคาร แลกเงิน ให้กับผู้ที่มาเป็นจำนวนมาก ดังนั้นการหายใจออกทางสถาปัตยกรรมของฉัน: ป.ล. ไม่จำเป็นต้องคัดลอกและสร้างโครงสร้างเพื่อความเกียจคร้านฉันได้แนบไฟล์เก็บถาวรพร้อมโค้ดไว้ที่ท้ายบทความ ;) โครงสร้าง :
การเขียนโปรแกรมอินเทอร์เฟซคืออะไร?  มาเล่นสถาปนิกกันเถอะ - 1
พวงของรุ่น:
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 {
}
คู่ข้อยกเว้น:
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;
    }
}
เครื่องบันทึกเงินสดเป็นส่วนที่สำคัญที่สุด:
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);
}
สิ่งแรกที่ดึงดูดสายตาของ Developer ที่ไม่ได้เตรียมตัวไว้javadocคือ แม้ว่าพวกเขาอาจจะคุ้นเคยกับนักพัฒนาที่ไม่ได้รับการฝึกฝนก็ตาม บางคนก็ขี้เกียจบ้างเป็นบางครั้ง แต่ Code ของฉันก็ดีอยู่แล้วโดยไม่ต้องมีเอกสาร ;) ถึงตอนนี้ฉันก็ไม่อยากเขียนเอกสารเกี่ยวกับบางสิ่งแล้ว แล้วทำไมเขียนถึงขนส่งว่าเป็นขนส่งล่ะ? ทิ้งไว้ทีหลังเถอะ! ฉันพยายามอธิบายทุกสิ่งที่จำเป็นในเอกสาร ตอนนี้ฉันจะอธิบายว่าทำไมการเขียนโค้ดด้วยวิธีนี้จึงสะดวกกว่า ดูสิ ตอนนี้ฉันสามารถให้อินเทอร์เฟซแก่คุณCashBoxและขอให้คุณนำไปใช้ เขาไม่ยากใช่ไหม? รวมถึงลักษณะการทำงานที่จำเป็นได้อธิบายไว้ในเอกสารประกอบ คุณไม่ต้องรอใครสักคนมาเขียนโมเดลหรืออะไรอย่างอื่น คุณใช้โมเดลอินเทอร์เฟซและเริ่มทำงานตามโมเดลเหล่านั้น ตอนนี้คุณกำลังเขียนโปรแกรมในส่วนต่อประสาน ขอแสดงความยินดีด้วย และตอนนี้สิ่งสำคัญ ฉันสามารถมอบหมายงานให้คุณนำไปใช้ได้CashBoxเช่นเดียวกับคนอื่น เพื่อให้เรามีการใช้งาน 2 แบบ เช่น สำนักงานขายตั๋วชานเมืองและต่างประเทศ คุณจะสามารถเขียนโค้ดแบบคู่ขนานได้ และสมาชิกในทีมที่จะเขียนโค้ดแบบพื้นฐานก็CashBoxสามารถเริ่มต้นและสร้างบนอินเทอร์เฟซได้แล้ว มันสะดวกสบายมาก มัลติทาสก์ไปนรกด้วย ลิงก์ไปยังโค้ดบน Google Drive -> ที่นี่
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION