Java物件導向淺析,物件導向淺析

來源:互聯網
上載者:User

Java物件導向淺析,物件導向淺析

一. 物件導向設計把握的一個重要經驗:

誰擁有資料, 誰就對外提供操作這些資料的方法.


二. 物件導向的幾個典型案例

1. 人在黑板上畫圓

涉及到的對象:  person,  blackboard, circle

畫圓的方法應該在那個對象裡面呢?

因為畫圓的方法涉及到私人成員變數圓心和半徑, 所以畫圓的方法應該由圓提供.


2. 列車司機緊急刹車

涉及到的對象: 司機, 列車

刹車的方法應該在司機裡面還是在列車裡面呢?

刹車動作涉及發動機熄火, 離合器離合, 抱死輪子, 所以該方法應該由列車提供


3. 售貨員統計售貨小票的金額

涉及到的對象: 售貨員, 票據

統計的方法應該由售貨員提供還是票據提供? (票據)


三. 物件導向設計題

1. 球從一根繩子的一端移動到另一端

public class Point {private float x;private float y;public Point(float x, float y) {this.x = x;this.y = y;}}class Rope {private Point start;private Point end;public Rope(Point start, Point end) {this.start = start;this.end = end;}public Point nextPoint(Point currentPoint) {return null;}}class Ball {private Rope rope;private Point currentPoint;public Ball(Rope rope, Point startPoint) {this.rope = rope;this.currentPoint = startPoint;}public void move() {}}

2. 兩塊石頭磨成一把石刀, 石刀可以砍樹, 砍成木材, 木材做成椅子

對象: Stone  StoneKnife   Tree  Material    Chair

StoneKnife s = KnifeFactory.createKnife(stone)

Material m = StoneKnife.cut(tree)

Chair c = ChairFactory.makeChair(material)





java是物件導向的還是面向過程的?

JAVA是物件導向的。
兩者的區別如下:

面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。

物件導向是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。

例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始遊戲,2、黑子先走,3、繪製畫面,4、判斷輸贏,5、輪到白子,6、繪製畫面,7、判斷輸贏,8、返回步驟2,9、輸出最後結果。把上面每個步驟用分別的函數來實現,問題就解決了。

而物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪製畫面,3、規則系統,負責判定諸如犯規、輸贏等。第一類對象(玩家對象)負責接受使用者輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的i變化就要負責在螢幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。

可以明顯地看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。

功能上的統一保證了物件導向設計的可擴充性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤對象就行了,棋盤系統儲存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的。

再比如我要把這個五子棋遊戲改為圍棋遊戲,如果你是面向過程設計,那麼五子棋的規則就分布在了你的程式的每一個角落,要改動還不如重寫。但是如果你當初就是物件導向的設計,那麼你只用改動規則對象就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對象中進行一番小改動就可以了。)而下棋的大致步驟從物件導向的角度來看沒有任何變化。

當然,要達到改動只是局部的需要設計的人有足夠的經驗,使用對象不能保證你的程式就是物件導向,初學者或者很蹩腳的程式員很可能以物件導向之虛而行面向過程之實,這樣設計出來的所謂物件導向的程式很難有良好的可移植性和可擴充性。
 
java中物件導向怎理解?最好是自己的理解

物件導向,其實就是把真實世界資料化,然後打包就叫對象了。。。
身高、體重、外形特徵,這些都是資料,把這些打包,我們稱之為人類。。。
也就是public class Human{}。
那麼,當這個類中的資料被具體賦值後,那麼我們得到的不再是一個種類,而是一個具體的人。
這樣我們就稱之為對象。
也就是new Human(...);
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.