主頁 > 軟體設計 > Java官方教程翻譯系列(一)(2020.12.14更)

Java官方教程翻譯系列(一)(2020.12.14更)

2020-12-14 11:00:35 軟體設計

面向物件編程概念

物件 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可帶來許多好處,包括

  1. 模塊化:可以獨立于其它物件的源代碼撰寫和維護該物件的源代碼,創建物件后,可以輕松地在系統內部傳遞物件,
  2. 資訊隱藏:僅通過methods與物件進行互動,其內部實作的細節仍對外部隱藏,
  3. 如果某個object已經存在(或許由其他開發人員撰寫),你可以在你的程式中使用該物件,這使得可以由專員實作/測驗/除錯特定的復雜物件,然后你可以放心地使用它們,
  4. 可插拔性和除錯簡便性:如果一個特定的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),

練一練

  1. Real-world objects contain ___ and ___.
  2. A software object’s state is stored in ___.
  3. A software object’s behavior is exposed through ___.
  4. Hiding internal data from the outside world, and accessing it only through publicly exposed methods is known as data ___.
  5. A blueprint for a software object is called a ___.
  6. Common behavior can be defined in a ___ and inherited into a ___ using the ___ keyword.
  7. A collection of methods with no implementation is called an ___.
  8. A namespace that organizes classes and interfaces by functionality is called a ___.
  9. The term API stands for ___?

答案
在這里插入圖片描述
說明
本文是橙子出于興趣愛好對Java官方教程的嘗試翻譯,會利用閑暇時間不定期更新,感興趣的朋友可以關注一下橙子,翻譯程序中盡量的對一些關鍵詞保留了英文原文,歡迎大家留言討論

年輕人不要不講武德,進來了點個贊再走啊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/234283.html

標籤:其他

上一篇:實驗九 類與物件(一) 程式片段編程題 5. 約瑟夫問題2020-12-12

下一篇:第九屆全國大學生GIS應用技能大賽下午試題(參考答案)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more