歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java實現OOP(面向對象編程)

Java實現OOP(面向對象編程)

日期:2017/3/1 9:05:21   编辑:Linux編程

一、對象的綜述

面向對象編程(OOP)具有多方面的吸引力。對管理人員,它實現了更快和更廉價的開發與維護過程。對分析與設計人員,建模處理變得更加簡單,能生成清晰、易於維護的設計方案。對程序員,對象模型顯得如此高雅和淺顯。此外,面向對象工具以及庫的巨大威力使編程成為一項更使人愉悅的任務。每個人都可從中獲益,至少表面如此。

所有編程語言的最終目的都是解決企業又或者人在現實生活中所遇到的問題,最初我們的程序可能長這樣“11111100001”,相信大家都不會陌生,只是大家沒這麼子去敲過代碼。再後來出現了匯編語言,匯編語言便是對基礎機器語言(二進制)的少量抽象,再到後來出現了許多“命令式”語言(如FORTRAN、BASIC和C),這些語言便是對匯編語言的一種抽象。這些語言都有了長足的進步,但它們的抽象原理依然要求我們著重考慮計算機的結構,而考慮的不是要解決的問題的本身結構。在機器與實際要解決的問題之間,程序員必須建立起一種聯系,這個過程要求人們付出較大的精力,使得程序代碼很難編寫,寫出來的代碼又很難理解,要花較大的代價進行維護。

面向對象的程序便很好的解決了這一問題,程序員可利用程序來表達實際問題中的元素,我們便將這些元素在程序中的表示稱為“對象”。我們可以根據現實中的問題來靈活配置對象,以便與特定的問題配合。與之前的語言相比,這無疑是一種更加靈活、更加強大的語言抽象。總之OOP允許我們根據問題來描述問題,而不是根據問題在機器中的方案。與現實世界中的“對象”或者“物體”相比,編程對象與它們也存在共通的地方:它們都有自己的特征和行為。

二、什麼是對象

通過上面的文字或許大家已經有些明白什麼是對象了吧?而上面的文字也是對對象的一種比較深入的理解,而我們最常見的理解方式無非是:對象(object)是任何看得見、摸得著、感覺得到,可以獲得的東西,有自己的標識的任何東西。對象是某一類的事物的具體個例。比如這輛汽車、這個人、這間房子、這張桌子、這株植物、這張支票、這件雨衣,概括來說就是:萬物皆對象。

在這裡給大家摘錄一些句子,希望看過的人能夠花時間去思考一下:

①“對象一般以域的形式包含數據,通常稱作屬性;以程序的形式包含代碼,通常稱作方法”。
②“對象在域中儲存自身狀態並通過方法暴露自身行為”。
③“每個對象就如一個小型電腦——它有狀態,並且它提供操作,你可以調用執行”。
④“一個類包含了存放數值的數據域和操作數值的的方法”。
⑤“一個對象就是儲存某些類型的值的內存空間”。
⑥“一個對象包含一些私有內存空間和一些操作”。

三、面向對象程序設計方法
(1)所有東西都是對象。可將對象想象成一種新型變量;它保存著數據,但可要求它對自身進行操作。理論上講,可從要解決的問題身上提出所有概念性的組件,然後在程序中將其表達為一個對象。
(2)程序是一大堆對象的組合;通過消息傳遞,各對象知道自己該做些什麼。為了向對象發出請求,需向那個對象“發送一條消息”。更具體地講,可將消息想象為一個調用請求,它調用的是從屬於目標對象的一個子例程或函數。
(3)每個對象都有自己的存儲空間,可容納其他對象。或者說,通過封裝現有對象,可制作出新型對象。所以,盡管對象的概念非常簡單,但在程序中卻可達到任意高的復雜程度。
(4)每個對象都有一種類型。根據語法,每個對象都是某個“類”的一個“實例”。其中,“類”(Class)是“類型”(Type)的同義詞。一個類最重要的特征就是“能將什麼消息發給它?”。
(5)同一類所有對象都能接收相同的消息。這實際是別有含義的一種說法。由於類型為“圓”(Circle)的一個對象也屬於類型為“形狀”(Shape)的一個對象,所以一個圓完全能接收形狀消息。這意味著可讓程序代碼統一指揮“形狀”,令其自動控制所有符合“形狀”描述的對象,其中自然包括“圓”。這一特性稱為對象的“可替換性”,是OOP 最重要的概念之一。
(6)一些語言設計者認為面向對象的程序設計本身並不足以方便解決所有形式的程序問題,提倡將不同的方法組合成“多形程序設計語言”。

四、對象的使用

下面讓我們以電燈泡為例:

在這個例子中,類型/類的名稱是 Light,可向 Light 對象發出的請求包括包括打開( on)、關閉( off)、變得更明亮( brighten )或者變得更暗淡( dim)。通過簡單地聲明一個名字( lt),我們為 Light 對象創建了一個“句柄”。然後用 new 關鍵字新建類型為 Light 的一個對象。再用等號將其賦給句柄。為了向對象發送一條消息,我們列出句柄名( lt),再用一個句點符號( .)把它同消息名稱( on)連接起來。從中可以看出,使用一些預先定義好的類時,我們在程序裡采用的代碼是非常簡單和直觀的。

五、封裝

封裝,即隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過外部接口,以特定的訪問權限來使用類的成員。隱藏之後,外部程序就不能接觸和改變那些細節,所以不用擔心自己的類會受到非法修改,可確保它們不會對其他程序造成影響。

封裝的原則:

1. 將不需要對外提供的內容都隱藏起來;

2. 把屬性都隱藏,提供公共方法對其訪問。

簡單示例代碼:

package com.alanlee;

public class Student {

//屬性私有化,避免屬性被直接使用和修改
private Integer age;

//對外提供公有的方法用來獲取對象的屬性值
public Integer getAge() {
return age;
}

//對外提供公有的方法,可以對對象的屬性進行控制,避免不合法的操作
public void setAge(Integer age) {
if(age > 0 && age < 100){
this.age =age;
}else{
System.out.println("輸入的年齡不合法!");
}
}

public static void main(String[] args) {
Student stu = new Student();
//賦值
stu.setAge(10);
//取值並打印
System.out.println(stu.getAge());
}
}

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-02/141161p2.htm

Copyright © Linux教程網 All Rights Reserved