面向物件編程概念
物件 object
An object是具有相關state和behavior的軟體,Software objects通常用于對你在日常生活中發現的現實世界物件的建模,本課程將說明state和behavior如何在物件中表示,并說明這樣設計軟體的好處,
Object是理解面向物件技術的關鍵,現在環顧四周,你會發現許多現實世界中object的示例:你的狗,書桌,電視機和自行車,
現實世界中的object有兩個特征:它們都有state和behavior,狗具有state(name, color, breed, hungry)和behavior(braking, fetching, wagging tail),自行車也具有state(current gear, current pedal cadence, current speed)和behavior(changing gear, changing pedal, applying breaks),識別現實世界的state和behavior是深入理解面向物件的好方法,
現在花一分鐘時間觀察你附近區域的真實物件,對于你看到的每一個物件,問自己兩個問題:”該物件可能處于什么狀態?“和”該物件可以執行什么行為?“ 寫下你的觀察結果,在執行操作的程序中你會發現真實物件的復雜度各不相同,你的臺燈只有兩種可能的state(on and off),和兩種可能的behavior(turn on and turn off),但是你的收音機可能有其他的state(on, off, current volume, current station)和behavior(turn on, turn off, increase volume, decrease volume, seek, scan, and tune),你可能還會注意到,某些objects又將包含其他objects,這些真實的觀察結果都將轉化為面向物件編程的世界,

Software objects在概念上與現實世界中的objects相似,它們也有state和related behavior ,An object 將其state儲存在fields中(一些編程語言中的variables),并通過methods(一些編程語言中的functions)暴露其behavior,Methords在物件的內部狀態上運行,并用作objects間通信的主要機制,隱藏內部state并要求通過objects間的methods執行所有的互動被稱為encapsulation(封裝) — 一個面向物件編程的基本原理,

通過把state(current speed, current pedal, and current gear)分類和提供改變state的methords,the object 可以控制外部如何使用它,例如,如果自行車有6個擋位,則更改擋位的方法可能會拒絕小于1或大于6的其它值,
將代碼系結到獨立的software objects可帶來許多好處,包括
- 模塊化:可以獨立于其它物件的源代碼撰寫和維護該物件的源代碼,創建物件后,可以輕松地在系統內部傳遞物件,
- 資訊隱藏:僅通過methods與物件進行互動,其內部實作的細節仍對外部隱藏,
- 如果某個object已經存在(或許由其他開發人員撰寫),你可以在你的程式中使用該物件,這使得可以由專員實作/測驗/除錯特定的復雜物件,然后你可以放心地使用它們,
- 可插拔性和除錯簡便性:如果一個特定的object有問題,則只需將其從應用程式中移除,然后替換為另一個即可,這類似于現實世界中的機械問題,如果螺栓斷裂,僅需替換螺栓即可,
類 class
A class 是創建物件的藍圖或者原型,本節定義了 a class 用于對實際物件的state和behavior進行建模,它特意注重基礎知識,展示一個簡單的class是怎樣清晰地建模state和behavior,
在現實世界中,你經常會發現許多同類的object,可能有成千上萬的自行車,都有相同的品牌和型號,每輛自行車都是根據相同的藍圖制造的,所以包含相同的組件,在面向物件的術語中,我們把你的自行車稱為自行車類的一個實體,A class 是創建individual objects的藍圖,
以下Bicycle class 是自行車的一種可能的實作:
class Bicycle {
int cadence = 0; //踏頻
int speed = 0; //速度
int gear = 1; //擋位
void changeCadence(int newValue) {
cadence = newValue;
}
void changeGear(int newValue) {
gear = newValue;
}
void speedUp(int increment) {
speed = speed + increment;
}
void applyBrakes(int decrement) {
speed = speed - decrement;
}
void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}
Java語法對你來說可能很新,但是這個class的設計是基于之前對自行車物件的討論,The fields cadence, speed, and gear 代表物件的state, the methods(changeCadence, changeGear, speedUp etc.)定義了物件與外界的互動,
你可能注意到Bicycle class不包含mian 方法,那是因為它不是一個完整的application, 它只是application中可能用到的bicycle的藍圖,創建和使用Bicycle objects是application中其它類的責任,
這是一個BicycleDemo class,它創建了兩個單獨的Bicycle objects并呼叫它們的方法,
class BicycleDemo {
public static void main(String[] args) {
// Create two different
// Bicycle objects
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();
// Invoke methods on
// those objects
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates();
bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);
bike2.changeGear(3);
bike2.printStates();
}
}
測驗的輸出顯示兩輛自行車的pedal cadence, speed, and gear,
cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3
繼承 inheritance
繼承為組織和構造軟體提供了強大而自然的機制,本節解釋了class 如何從其superclass繼承state和behavior,并說明了如何使用Java編程語言提供的簡單語法從一個class派生(derive)另一個class,
介面 interface
interface是class和外界的契約,當a class實作a interface時,它承諾提供該介面發布的behavior,本節定義了一個簡單的interface并且說明了實作該interface的任何class的必要改變,
包 package
包是邏輯上的組織class和interface的命名空間,將你的代碼放入包里使得大型軟體專案更易于管理,本節說明了這樣做的好處,并向您介紹Java平臺提供的應用程式編程介面(API),
練一練
- Real-world objects contain ___ and ___.
- A software object’s state is stored in ___.
- A software object’s behavior is exposed through ___.
- Hiding internal data from the outside world, and accessing it only through publicly exposed methods is known as data ___.
- A blueprint for a software object is called a ___.
- Common behavior can be defined in a ___ and inherited into a ___ using the ___ keyword.
- A collection of methods with no implementation is called an ___.
- A namespace that organizes classes and interfaces by functionality is called a ___.
- The term API stands for ___?
答案

說明
本文是橙子出于興趣愛好對Java官方教程的嘗試翻譯,會利用閑暇時間不定期更新,感興趣的朋友可以關注一下橙子,翻譯程序中盡量的對一些關鍵詞保留了英文原文,歡迎大家留言討論
年輕人不要不講武德,進來了點個贊再走啊!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/234283.html
標籤:其他
