1. 程式人生 > >面向物件的基本概念、基本特徵、設計原則

面向物件的基本概念、基本特徵、設計原則

面向物件:面向物件一種對現實世界理解和抽象的軟體開發方法——from 百度百科

面向物件程式設計:是一種基於物件的程式設計正規化(英語為Programming paradigm,正規化即模式、方法),它可能包含屬性(knows as attribute)和方法(knows as method)。物件的一個特徵就是物件的方法可以訪問並且通常會修改物件的屬性。在面向物件程式設計中,計算機程式通常是通過產生能相互作用的物件設計而成的。面嚮物件語言有許多值得注意的差異性,但是最流行的一種是基於類的(class-based),意味著物件是類的例項,類能決定物件的型別。—— from 維基百科.

面向物件的基本概念

面向物件和麵向過程的區別

區分維度 Procedure Oriented Programming Object Oriented Programming
分割結果不同 程式分割成一個個函式 程式分割為一個個物件
重要點不同 函式、動作執行的序列比較重要,而不是資料 資料比較重要,而不是函式,因為面向物件程式設計是對現實世界的抽象
處理方向不同 遵循自頂向下(top down) 遵循自底向上(bottom up)
訪問許可權修飾符 有public、private、protected等
資訊流動的種類不同 資料可以自由地在系統中各個函式之間移動 通過成員函式物件可以移動和相互交流
擴充套件性 新增資料和函式困難 新增資料和函式簡單
資料的訪問 因為訪問許可權修飾符,全域性資料在系統中各個函式間共享十分簡單 資料在成員函式之間不易移動,因為有訪問許可權修飾符控制
資料隱藏性 沒有恰當方式進行資料隱藏,因為不太安全 提供資料隱藏,所以比較安全
過載(Overloading) 不支援 支援函式過載、運算子過載
複用性 較差 較好,繼承即是其中程式碼複用的一個特性
代表性語言 C,VB,Fortran,Pascal C++,JAVA,C#

補充:
1. 當代碼進行一些小改動(比如增加或減小某個需求),與OOP相比,一般POP的程式碼改動量較大。
2. 互動性很高的程式,不適宜用POP實現,側面反映OOP比較通用。
3. 面向過程: 程式 = 演算法 + 資料
4. 面向物件: 程式 = 物件 + 訊息
5. Procedural programming commands the computer step by step via a list of instructions. It relies on subroutines or routines. A routine can have a series of computational steps. Procedural programming is sometimes referred to as imperative programming.
6. Object-oriented programming, as its name implies, relies on objects. Objects are components of a program that know how to execute certain tasks and interact with the other elements of the program.
7. OOP、POP共同點是to make programming efficient。

物件、類、例項的區別

類解釋一:是一種面向物件計算機程式語言的構造,是建立物件的藍圖,描述了所建立的物件共同的屬性和方法。—— from 維基百科

類解釋二:In very simple terms, a class is a blueprint or a template for a specific real life object.

物件:an object is the memory block(s) used to store necessary information according this blueprint.

類例項化的結果就是物件。例項化就是一個“按照藍圖(class)創建出一個真實物件”的過程。物件被創建出來後,物件本身就包含了屬性、方法等資訊,所以可以說物件其實就是儲存必要資訊的記憶體塊。
例子:

new Car();

說明:
a. 通過new操作,一個Car物件被建立,返回的是Car物件的引用。
b. Car物件的宣告週期從呼叫Car建構函式開始直至被銷燬。
c.銷燬後被垃圾回收器所回收。

例項:Instance is a memory block that refers an object.

Car myCar = new Car();

說明:
a. Car被例項化後,會返回一個引用,這個引用就是儲存在myCar。即是說myCar就是例項(instance)。

Object Vs. Instance
Instance是一個指向Object的引用。
當所有指向一個物件的引用被置空(null),Object被垃圾收集器回收掉。

抽象類、介面的區別

定義

抽象類: Abstract classes are created to capture common characteristics of subclasses. It can not be instantiated, it can be only used as super class by its subclasses. Abstract classes are used to create template for its sub classes down the hierarchy.

介面:An interface is a collection of abstract methods. A class implements an interface, thereby inheriting the abstract methods of the interface. So it is kind of signing a contract, you agree that if you implement this interface, then you have to use its methods. It is just a pattern, it can not do anything itself.

區別

區分維度 抽象類 介面
預設方法實現 它可以有預設的方法實現 介面是完全抽象的,它不能有任何實現
Implementation 子類用關鍵字extends來繼承抽象類,除非子類也是抽象類,否則子類需要實現抽象類的所有方法。 子類使用關鍵字implements來實現介面,並且需要實現介面的所有方法
構造器 抽象類可以有構造器 介面不能有建構函式
與普通類不同之處 抽象類與普通類幾乎一樣,除了不能例項化 介面與普通類完全不同
訪問修飾符 抽象類方法可以有 public ,protected,private 和default 修飾符 介面方法預設是共有的
Main 方法 抽象類有main方法,我們可以執行它 介面沒有main方法,所以我們不能執行它(jdk1.8可以有main方法)
多繼承 抽象類只可以繼承一個其他類,但是可以實現一個或者一個以上的介面 介面可以繼承一個或者一個以上介面
執行速度 比介面快 介面比較慢,因為它會花時間去找類中的實現方法
新增新的方法時 當你在抽象類中新增新的方法時,只需要在方法體中加上實現的程式碼而不需要修改現有的程式碼 假如你在介面上新增新的方法, 你需要在所有實現了該介面的子類中新增新增方法的實現

使用場景

  1. 如果你有很多方法,但是隻想實現其中的一部分方法,則使用抽象類。
  2. 如果你想使用多繼承,則使用介面。
  3. 假如你的基本條款老是變化,則使用抽象類。因為如果使用介面,那麼它的所有實現類都需要跟著變化,而使用抽象類就不需要變動。

Reference

OOP Vs POP 參考網址

抽象類與介面區別

物件與例項的區別

相關推薦

面向物件的三個基本特徵是:封裝繼承多型。(詳解示例)

什麼是封裝:  封裝是實現面向物件程式設計的第一步,封裝就是將資料或函式等集合在一個個的單元中(我們稱它為類)。被封裝的物件通常被稱為抽象資料型別。也可以稱作抽象,將現實中的資料抽象成為資料型別 封裝的意義:   封裝的意義在於保護或者防止程式碼(資料)被我們無意中破壞。

面向物件概念物件概念

面向物件概念回顧   使用類對映現實生活中的事物,其功能封裝為方法,屬性封裝為成員變數。   一個類擁有的成員包括:       成員變數       構造方法       普通方法       getters/setters   物件在記憶體中的位置:       物件由new關鍵字建立,如同

面向物件的四個基本特徵和七大設計原則

複習一哈~ 基本特徵抽象 將一些事物的共性抽離出來歸為一個類。 如對於動物,具有生命體徵、活動能力等區別於其它事物的共同特徵 封裝 有選擇地隱藏和暴露資料和方法 比如有U盤這個類,我希望隱藏內部組成和實現,只暴露USB介面以供使用 繼承 子類可以直接使用父類的部分資料和方法,可以

Python中的面向物件程式設計的一些基本概念總結

一、一些專有詞彙的定義 面對物件程式設計(OOP:object oriented programming): 是一種程式設計範型,同時也是一種程式開發的方法,實現OOP的程式希望能夠在程式中包含各種獨立而又相互呼叫的物件,沒一個物件又都應該能夠接受資料、資料處理並將

程序同步的基本概念:臨界資源同步和互斥

在多道程式環境下,程序是併發執行的,不同程序之間存在著不同的相互制約關係。為了協調程序之間的相互制約關係,引入了程序同步的概念。 臨界資源 雖然多個程序可以共享系統中的各種資源,但其中許多資源一次只能為一個程序所使用,我們把一次僅允許一個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源

面向物件的三個基本特徵和五種設計原則

面向物件的三個基本特徵 抽象與封裝: 抽象是把系統中需要處理的資料和在這些資料上的操作結合在一起,根據功能、性質和用途等因素抽象成不同的抽象資料型別。每個抽象資料型別既包含了資料,又包含了針對這些資料的授權操作。在面向物件的程式設計中,抽象資料型別是用“類”

面向物件的3大基本特徵

三大特性是:封裝,繼承,多型   所謂封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。封裝是面向物件的特徵之一,是物件和類概念的主要特性。 簡單的說,一個類就是一個封裝了資料以及操作這些資料的程式碼的邏輯實

區塊鏈學堂(4):以太坊基本概念及工具GethBrowser-solidityMist

在我研究以太坊技術的過程中,由於相關資料較少,因此走了較多的彎路。所以這裡我們不會先介紹Solidity的語法結構,而會在接下來的第一階段,從實戰出發,陸續向大家介紹Geth、Browser-solidity、Mist這三大工具,並在過程中不斷講解以太坊的基本概念。 通過這

執行緒的基本概念基本狀態狀態之間的關係

基本概念 執行緒:是程序中的一個執行控制單元,執行路徑       一個程序中至少有一個執行緒在負責控制程式的執行       一個程序中如果只有一個執行路徑,這個程式稱為單執行緒       一個

面向物件的三個基本特徵和五個設計原則

面向物件的精神:可維護、可擴充套件、可複用、靈活性好。 三個基本特徵【封裝、繼承、多型】 封裝:每個物件都包含它能進行操作所需要的所有資訊,這個特性稱為封裝。 因為物件不必依賴其他物件來完成自己的操作,這樣方法和屬性包裝在類中,通過類的例項來實現。 封裝的好處:1、良好

OpenGL基本概念入門4——顏色光照和材質1

值得一提的是材質。OpenGL中的材質並非我們平常所說的組成物體的元素(如木材、金屬材質),而是指一個物體對不同顏色的光的反射和吸收程度。比如,在光照系統中,如果一個物體表現為紅色,則是因為這個物體吸收了從光源放射出來的綠色和藍色光,而將絕大多數紅色的光反射了出來。正因如此,一旦你開啟了光照系統,就要通過指定

面向物件的三個基本特徵 和 五種設計原則

一、三個基本特徵 面向物件的三個基本特徵是:封裝、繼承、多型。 封裝 封裝最好理解了。封裝是面向物件的特徵之一,是物件和類概念的主要特性。 封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。 繼承 面向物件程式設計 (OOP) 語言的一個

1.1 js 面向對象的基本概念基本使用方法

朝向 排序 讀取 只需要 try catch 傳遞 個數 存在 創建表 js 面向對象的基本概念和基本使用方法 -> js 是不是一個面向對象的語言? 說不是:因為與傳統面向對象的理論語言有矛盾。C#,Java。 說是:因為js裏面到處都是對象,數組,時間,正則

Java面向物件模板方法(溫習finalabstract)

 /*  * 當代碼完成優化後,就可以解決這類問題  * 這種方式就是模板方法:  *     在定義功能時,功能一部分是確定的,但有一部分是不確定的,而確定的部分在使用不確定的部分,  * 那麼這時就將不確定的部分

面向物件的三大特性:封裝繼承多型

1.封裝  將一些資訊放入類內部(private),不允許外部程式直接訪問,如果需要使用這些資訊則需要通過該類提供的方法來實現對資料資訊的操作和訪問。 2.繼承(extends) 將已經存在的一個類A的屬性作為自己的屬性,並新增其他新的屬性或修改原來的方法使之符合新的需求所產生

PHP學習——28 PHP面向物件(抽象類與抽象方法介面的實現)

一、抽象類與抽象方法 <?php // 任何一個類,如果它裡面至少有一個方法是被宣告為抽象的,那麼這個類就必須被宣告為抽象的。 abstract class Person // 定義為抽象的類不能被例項化。 { public $name; public function __co

JAVA面向物件三大特性以及抽象類介面

初識JAVA面向物件 提起面向物件,我們也就想到了面向過程。那麼何為面向物件呢?簡言之萬物皆物件…眾生芸芸,雲裡霧裡不能自已。 好了,步入正題,面向物件是JAVA這門語言的核心所在。要想使用這門語言在猿界立足,一定得要有面向物件的這種程式設計思想。 一、面向物件

面向物件程式設計的六大基本原則

面向物件六大原則 單一原則:每一個類或者一個方法只有一個功能,或者是隻有一個重要的功能 開閉原則:對於類的拓展是開放的,修改是關閉的(儘量不要修改之前的程式碼) 里氏替換原則:在使用父類的任何地方都可以使用子類,並且不影響程式的執行。 依賴倒置原則:高模組和低模組都應

黑馬程式設計師——Java面向物件(二)之封裝繼承多型介面等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 五、面向物件的特徵  面向物件主要有三大特徵: 1.特徵一 —— 封裝  1)定義:是指隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。 2)好處:

黑馬程式設計師——Java面向物件(三)之內部類異常包等

-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 六、物件的其他重要內容 1.單例設計模式  1)什麼是單例設計模式?   單例設計模式是指能夠確保一個類只有一個例項,並且能夠自行向整個系統提供這個例項