“java面向對象特征“什么叫面相對象?

什么是面向對象,什么是面向過程
面向過程就是分析出解決問題所需要的,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了 。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為 。
1.什么是面向對象技術?
面向對象技術是一種以對象為基礎,以事件或消息來驅動對象執行處理的程序設計技術 。它具有抽象性、封裝性、繼承性及多態性 。
2.面向對象與面向過程程序設計有什么不同?
面向對象與面向過程程序設計有如下不同:
(1)面向過程程序設計方法采用函數(或過程)來描述對數據的操作,但又將函數與其操作的數據分離開來;面向對象程序設計方法將數據和對數據的操作封裝在一起,作為一個整體來處理 。函數與數據是否分離
(2)面向過程程序設計方法以功能為中心來設計功能模塊,難于維護;而面向對象程序設計方法以數據為中心來描述系統,數據相對于功能而言具有較強的穩定性,因此更易于維護 。
(3)面向過程程序的控制流程由程序中預定順序來決定;面向對象程序的控制流程由運行時各種事件的實際發生來觸發,而不再由預定順序來決定,更符合實際需要 。預定順序;由運行時各種事件的實際發生來觸發
(4)面向對象程序設計方法可以利用框架產品(如MFC,Microsoft Foundation Classes)進行編程 。面向對象可利用框架 面向對象和面向過程的根本差別,在于封裝之后,面向對象提供了面向過程不具備的各種特性,最主要的,就是繼承和多態 。
3.面向對象技術有哪些優點?
面向對象技術具有程序結構清晰,自動生成程序框架,實現簡單,可有效地減少程序的維護工作量,代碼重用率高,軟件開發效率高等優點 。4.面向對象技術中的封裝性有何優缺點?如何克服這些缺點?
封裝將對象有關的數據和行為封裝成整體來處理,使得對象以外的部分不能隨意存取對象的內部屬性,從而有效地避免了外部錯誤對它的影響,大大減小了查錯和排錯的難度 。另一方面,當進行修改對象內部時,由于只有少量的外部接口對外提供服務,因此同樣減小了內部的修改對外部的影響 。如果一味地強調封裝,對象的任何屬性都不允許外部直接存取,則要增加許多沒有其他意義、只負責讀或寫的行為 。這會為編程工作增加負擔,增加運行開銷,并且使程序顯得臃腫 。為了避免這一點,在程序的具體實現過程中應使對象有不同程度的可見性,進而與客觀世界的具體情況相符合 。
面向對象的特點是:封裝,多態,繼承 。其中多態有分為重載和重寫 。面向對象的編程思想更加接近現實的事物 。有這樣幾點好處:
1、是編程更加容易 。因為面向對象更接近于現實,所以你可以從現實的東西出發,進行適當的抽象 。
2、在軟件工程上,面向對象可以使工程更加模塊化,實現更低的耦合和更高的內聚 。
3、在設計模式上(似乎只有面向對象才設計到設計模式),面向對象可以更好的實現開-閉原則 。也使代碼更易閱讀 。相對而言,面向過程的程序設計是面向對象程序設計的基礎 。面向對象的程序里面一定會有面向過程的程序片斷的
5.為什么要應用繼承機制? 客觀事物既有共性,也有特性 。如果只考慮事物的共性,而不考慮事物的特性,就不能反映出客觀世界中事物之間的層次關系 。抽象機制是考慮事物的共性,繼承機制是考慮事物的特性,這樣才能完整地描述客觀世界的層次關系 。繼承能使軟件模塊具有可重用性、獨立性,縮短軟件開發周期,提高軟件開發效率,同時使軟件易于維護 。
6.C對多態性的支持體現在哪些方面?
C的多態性分為編譯時多態和運行時多態 。編譯時多態是指在程序的編譯階段由編譯系統根據參數確定與哪個同名的函數相聯系;運行時多態是指在程序的運行階段才根據產生的信息確定需要調用哪個同名的函數 。C通過函數重載和運算符重載實現編譯時多態,通過繼承和虛函數來實現運行時多態 。
7.目前常用的面向對象程序設計語言有何異同? 目前常用的面向對象程序設計語言有C、Java、Visual Basic等 。C是混合型面向對象程序設計語言,繼承并改進了C語言,是一種既支持面向對象又支持面向過程的程序設計方法 。Java是純面向對象程序設計語言,從C發展而來 。C和Java均支持面向對象技術的基本概念和基本特征,如封裝、類、構造函數、析構函數、繼承、多態等 。C與Java語法描述有相同之處,也有不同之處 。如基本結構語句的語法大致相同,而類定義的語法等方面則不相同 。
此外還有以下不同:
(1)C有運算符重載機制,而Java沒有此特性;
(2)C支持多重繼承,而Java只支持單重繼承;
(3)C通過構造函數創建對象,可以直接使用指針來操作對象的成員,而Java通過new運算符創建對象,通過new運算符返回的對象引用來使用對象,而不是直接操作指針;
(4)C程序要顯式地釋放所分配的內存,而Java具有內存垃圾收集機制,自動管理內存,不需要顯式釋放所分配的內存 。Visual Basic繼承了BASIC語言所具有的語法簡單、容易學習、容易使用、數據處理能力強的特點,又引入了面向對象、事件驅動的編程機制和可視化程序設計方法,大大降低了開發Windows應用程序的難度,有效地提高了應用程序開發的效率 。但是,Visual Basic存在語法不嚴格、開發出的系統穩定性較低的缺點 。相對C來說,Visual Basic面向系統底層的編程能力有限
面相對象編程?
是類的一例,態和行為 。例如,一條狗是一個對象,它的狀態有:顏色、、品種;行為有:搖尾巴、叫、吃等 。
類是一個模板,它描述一類對象的行為和狀態 。
男孩(boy)、女孩(girl)為類(class),而具體的每個人為該類的對象(object)
編程里面我對面相過程跟面相對象的概念我的認為 。
理解的面了 。而且走偏了 。
面向對象和面向過程指兩種不同的編程思維方式 。
面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了 。
面向對象是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為 。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:1、開始游戲,2、黑子先走,3、繪制畫面,4、判斷輸贏,5、輪到白子,6、繪制畫面,7、判斷輸贏,8、返回步驟2,9、輸出最后結果 。把上面每個步驟用分別的函數來實現,問題就解決了 。
而面向對象的設計則是從另外的思路來解決問題 。整個五子棋可以分為 1、黑白雙方,這兩方的行為是一模一樣的,2、棋盤系統,負責繪制畫面,3、規則系統,負責判定諸如犯規、輸贏等 。第一類對象(玩家對象)負責接受用戶輸入,并告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的i變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定 。
可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟 。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化 。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一 。
功能上的統一保證了面向對象設計的可擴展性 。比如我要加入悔棋的功能,如果要改動面向過程的設計,那么從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整 。如果是面向對象的話,只用改動棋盤對象就行了,棋盤系統保存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的 。
再比如我要把這個五子棋游戲改為圍棋游戲,如果你是面向過程設計,那么五子棋的規則就分布在了你的程序的每一個角落,要改動還不如重寫 。但是如果你當初就是面向對象的設計,那么你只用改動規則對象就可以了,五子棋和圍棋的區別不就是規則嗎?(當然棋盤大小好像也不一樣,但是你會覺得這是一個難題嗎?直接在棋盤對象中進行一番小改動就可以了 。)而下棋的大致步驟從面向對象的角度來看沒有任何變化 。
面向過程-->面向對象 這是一種思維的進步
什么叫面相對象?
http://www.jade-china.net/data/2005/1229/article_31.htm
轉自:伊圖網[www.4ico.com]在闡述類的概念之前我們來先說說面向對象編程的概念:面向對象的設計(Object-Oriented Programming,簡記為OOP)立意于創建軟件重用代碼,具備更好地模擬現實世界環境的能力,這使它被公認為是自上而下編程的優勝者 。它通過給程序中加入擴展語句,把函數“封裝”進編程所必需的“對象”中 。面向對象的編程語言使得復雜的工作條理清晰、編寫容易 。說它是一場革命,不是對對象本身而言,而是對它們處理工作的能力而言 。對象并不與傳統程序設計和編程方法兼容,只是部分面向對象反而會使情形更糟 。除非整個開發環境都是面向對象的,否則對象產生的好處還沒有帶來的麻煩多 。有人可能會說PHP不是一個真正的面向對象編程的語言,PHP 是一個混合型 語言,你可以使用面向對象編程,也可以使用傳統的過程化編程 。然而,對于大型項目的開發,你可能想需要在PHP中使用純的面向對象編程去聲明類,而且在你的項目開發只用對象和類 。隨著項目越來越大,使用面向對象編程可能會有幫助,面向對象編程代碼很容易維護,容易理解和重復使用,這些就是軟件工程的基礎 。在基于Web的項目中應用這些概念就成為將來網站成功的關鍵 。
對象(Object)是問題域或實現域中某些事物的一個抽象,它反映此事物在系統中需要保存的信息和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組服務的封裝體 。關于對象要從兩方面理解:一方面指系統所要處理的現實世界中的對象;另一方面對象是計算機不直接處理的對象,而是處理相應的計算機表示,這種計算機表示也稱為對象 。簡單的來說,一個人就是一個對象,一個尺子也可以說是個對象 。當這些對象可以用數據直接表示時,我們就稱他為屬性,尺子的度量單位可以是厘米,公尺或英尺,這個度量單位就是尺子的屬性 。
在PHP里我們可以定義一個類,類(Class)就是指變量與一些使用這些變量的函數的集合 。PHP是一種松散類型的語言,所以通過類型重載不起作用,通過參數的個數不同來重載也不起作用 。有時在面向中重載構造函數非常好,這樣你可以通過不同的方法創建對象(傳遞不同數量的參數) 。在PHP中就是通過類來實現的 。
在PHP中是通過類來完成信息封裝的,在PHP中定義類的語法是:
<?php
class Class_name // 在面向對象編程類中,習慣上類的第一個字符為大寫,并且必須符合變量的命名規則 。
{
//函數與變量的集合
}
?>
在定義類時你可以按自已的喜好的格式進行定義,但最好能保持一種標準,這樣開發起來會更有效些 。
數據成員在類中使用"var"聲明來定義,在給數據成員賦值之前,它們是沒有類型的 。一個數據成員可以是一個整數,一個數組,一個相關數組(Associative Array)或者是一個對象 。
下面是一個類定義的實際例子:
<?php
class Student
{
var $str_Name; //姓名
var $str_Sex; //性別
var $int_Id; //學號
var $int_English; //英語成績
var $int_maths; //數學成績
}
?>
這是一個很普通定義類的簡單例子,用于顯示學生的學習成績,類名為Student,Student類包涵了一個學生的基本屬性:姓名、性別、學號、英語成績和數學成績 。
function我們稱之為在類中被定義的函數,在函數中訪問類成員變量時,你應該使用$this->var_name,其中var_name指的是類中被聲明的變量,否則對一個函數來說,它只能是局部變量 。我們先定義一個Input()的函數,用來給實例中的對象賦以初值:
function Input ( $Name, $Sex, $Id, $Englis, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_Englis=$English;
$this->int_Maths=$Maths;
}
現在我們再定義一個叫“ShowInfo()”的函數,用于打印學生的基本情況:
function ShowInfo() //定義ShowInfo()函數
{
echo (“姓名:$this->str_Name

”);
echo (“性別:$this->str_Sex

”);
echo (“學號:$this->int_Id

”);
echo (“英語成績:$this->int_English

”);
echo (“數學成績:$this->int_Maths

”);
}
而定義好的類則必須使用new關鍵詞來生成對象:
$A_student=new Student;
例如我們要為一個名為$Wing的對象創建實例,并進行賦值,可以使用下面的代碼:
$Wing =new Student; //用new關鍵詞來生成對象
$Wing ->Input (“Wing”,”男”,33,95,87);
//分別輸入Wing的姓名、性別、學號、英語成績、數學成績,其中姓名和性別是字符型變量,所以需要用雙引號,其它為數值型變量則不需要 。
通過下面這段完整的源代碼,我們就可以很清楚的看到類在PHP是怎么被運用的:
<?php
class Student
{
var $str_Name;
var $str_Sex;
var $int_Id;
var $int_English;
var $int_maths;
function Input ( $Name, $Sex, $Id, $English, $Maths)
{
$this->str_Name=$Name;
$this->str_Sex =$Sex;
$this->int_Id =$Id;
$this->int_English=$English;
$this->int_Maths=$Maths;
}
function ShowInfo()
{
echo (“姓名:$this->str_Name

”);
echo (“性別:$this->str_Sex

”);
echo (“學號:$this->int_Id

”);
echo (“英語成績:$this->int_English

”);
echo (“數學成績:$this->int_Maths

”);
}
}
$Wing = new Student;
$Wing->Input (“Wing”,”男”,33,95,87);
$Paladin = new Student;
$Paladin->Input (“paladin”,”女”,38,58,59.5);
$Wing->ShowInfo();
$Paladin->ShowInfo();
?>
執行結果應是這樣的:
姓名:Wing
性別:男
學號:33
英語成績:95
數學成績:87
姓名:Paladin
性別:女
學號:38
英語成績:58
數學成績:59.5
PHP現有的版本較以前的版本在對面向對象編程的支持方面有了很大的改善,但支持的還不是很完整,不過現階段PHP對面向對象編程語言提供的支持不但有利于我們設計程序的結構,對于對程序的維護也能提供很大的幫助 。
面相對象的特征
只要好看就行了唄對吧?你們說對吧?面向對象的什么玩意兒?哼!
面相對象問題
你只是面向類的對象,不是實體的對象 。所以你的對象是沒有實體的,也就是沒有現實中的對象 。不過你可以面向過程編程,有過程才有對象 。