對象導向編程
㈠ 如何簡單的理解面向對象編程
分類: 電者液腦/網路 >> 程序設計 >> 其他編程語言
問題描述:
如何簡單的理解面向對象編程??
有什麼形象的例子可以幫助理解??
解析:
轉自:伊圖網[4ico]在闡述類的概念之前我們來先說說面向對象編程的概念:面向對象的程序設計(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<br>
」);
echo (「性別:$this->str_Sex <br>
」);
echo (「學號:$this->int_Id <br>
」);
echo (「英語成績:$this->int_English <br>
」);
echo (「數學成績:$this->int_Maths <br>
」);
}
而定義好的類則必須使用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<br>
」);
echo (「性別:$this->str_Sex <br>
」);
echo (「學號:$this->int_Id <br>
」);
echo (「英語成績:$this->int_English <br>
」);
echo (「數學成績:$this->int_Maths <br>
」);
}
}
$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對面向對象編程語言提供的支持不但有利於我們設計程序的結構,對於對程序的維護也能提供很大的幫助。
㈡ C#屬於什麼語言
個人答案:面向對象語言x0dx0ax0dx0a官方文獻:x0dx0aC#(C Sharp)是微軟(Microsoft)為.NET Framework量身訂做的程序語言,C#擁有C/C++的強大功能以及Visual Basic簡易使用的特性,是第一個組件導向(Component-oriented)的程序語言,和C++與java一樣亦為對象導向(object-oriented)程序語言。x0dx0ax0dx0a簡介x0dx0ax0dx0a C sharp(又被簡稱為「C#」)是微軟公司在二零零年六月發布的一種新的編程語言,並定於在微軟職業開發者論壇(PDC)上登台亮相.C#是微軟公司研究員Anders Hejlsberg的最新成果.C#看起來與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語法,和編譯成中間代碼再運行的過程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個特點,與COM(組件對象模型)是直接集成的,而且它是微軟公司.NET windows網路框架的主角.x0dx0a 在本文中,我將考察創建一種新計算機語言的一般動機,並將特別指明是什麼原因導致了C#的出現.然後我將介紹C#和它與Java,c,c++的相似之處.其次我將討論一些存在於Java和C#之間的高層次的,和基礎的差別.我將以衡量在用多種語言開發大型應用程序的時候所需的知識(或者對這種知識的缺乏程度)來結束本文,而這正是.NET和C#的一個主要戰略.目前,C#和.NET還只能以C#語言規則,以及Windows 2000的一個"d預覽版本",還有MSDN上迅速增多的文檔集子的形式獲得(還沒有最終定型).x0dx0a編輯本段x0dx0a定義x0dx0ax0dx0a 微軟c#語言定義主要是從C和C++繼承而來的,而且語言中的許多元素也反映了這一點.C#在設計者從C++繼承的可選選項方面比Java要廣泛一些(比如說structs),它還增加了自己新的特點(比方說源代碼版本定義).但它還太不成熟,不可能擠垮Java.C#還需要進化成一種開發者能夠接受和採用的語言.而微軟當前為它的這種新語言大造聲勢也是值得注意的.目前大家的反應是:"這是對Java的反擊."x0dx0a C#更象Java一些,雖然微軟在這個問題上保持沉默.這也是意料中的事數配情,我覺得,因為Java近來很成功而使用Java的公司都報告說它們在生產效率上比C++獲得了提高.x0dx0a Java所帶來的巨大影響和大家對它的廣泛接受已經由工作於這種語言和平台之上的程序員數量明顯的說明了(估計世界范圍內共有兩百五十萬程序員使用Java).由這種語言寫成的應用程序的數量是令人驚訝的並已經滲透了每一個級別的計算,包括無線計算和行動電話(比如日本發明的Java電話).C#能夠在用戶領域獲得這樣的禮遇嗎?我們必須等待並觀望,就象已經由SSI公司的CEO和主席Kalpathi S. Suresh指出來的那樣,"我發現所有這些都是漸進的.如果C#不型亮存在,我們總能回到Java或C和C++.這些都不完全是新技術;它們在更大的意義上來說只是大公司製造的市場噱頭.我們必須給他們時間安頓下來看看這些是不是卜畢寬真的對IT工業有什麼影響."x0dx0a編輯本段x0dx0aC#從Java繼承而來的特點x0dx0ax0dx0a 類:在C#中類的申明與Java很相似.這是合理的因為經驗告訴我們Java模型工作得很好.Java的關鍵字import已經被替換成using,它起到了同樣的作用.一個類開始執行的起點是靜態方法Main().下面的Hello World程序展示了基本的形式:x0dx0a using System;x0dx0a class Hello {x0dx0a static void Main() {x0dx0a Console.WriteLine("Hello, world");x0dx0a }x0dx0a }x0dx0a 在這個例子中,System這個名字指向一個包括了基本C#實用類集合的命名空間(namespace).這個命名空間包括了Console類,它在這個例子中被用來輸出一個字元串.類可以是抽象的和不可繼承的:一個被申明成abstract的類不能被實例化;它只能被用做一個基類.C#關鍵字lock就象Java關鍵字final,它申明一個類不是抽象的,但是它也不能被用做另一個類的基類.界面:就象在Java中一樣,一個界面是一組方法集合的抽象定義.當一個類或結構體實現一個界面的時候,它必須實現這個界面中定義的所有方法.一個單一的類可以實現幾個界面.也許以後會出現一些微妙的差別,但是這個特點看起來與Java相比沒有變化.布爾運算:條件表達式的結果是布爾數據類型,布爾數據類型是這種語言中獨立的一種數據類型.從布爾類型到其他類型沒有直接的轉換過程.布爾常量true和false是C#中的關鍵字.錯誤處理:如Java中那樣,通過拋出和捕捉異常對象來管理錯誤處理過程.內存管理:由底層.NET框架進行自動內存垃圾回收.x0dx0a編輯本段x0dx0aC#從C和C++繼承的特點x0dx0ax0dx0a 編譯:程序直接編譯成標準的二進制可執行形式.如果前面的Hello World程序被保存成一個文本文件並被命名為Hello.cs,它將被編譯成命名Hello.exe的可執行程序.x0dx0a 結構體:一個C#的結構體與C++的結構體是相似的,因為它能夠包含數據申明和方法.但是,不象C++,C#結構體與類是不同的而且不支持繼承.但是,與Java相同的是,一個結構體可以實現界面.x0dx0a 預編譯:C#中存在預編譯指令支持條件編譯,警告,錯誤報告和編譯行控制.可用的預編譯指令有:x0dx0a #definex0dx0a #undefx0dx0a #ifx0dx0a #elifx0dx0a #elsex0dx0a #endifx0dx0a #warningx0dx0a #errorx0dx0a #line []x0dx0a 沒有了#include 偽指令.你無法再用#define 語句對符號賦值,所以就不存在源代碼替換的概念--這些符號只能用在#if和#elif偽指令里.在#line偽指令里的數字(和可選的名字)能夠修改行號還有#warning和#error輸出結果的文件名.x0dx0a編輯本段x0dx0a操作符重載:x0dx0ax0dx0a 一些操作符能夠被重載,而另一些則不能.特別的是,沒有一個賦值運算符能夠被重載.能夠被被重載的單目操作符是:x0dx0a + - ! ~ ++ -- true falsex0dx0a 能夠被重載的二元運算符是:x0dx0a + - * / % & | ^ << >> == != > < >= <=x0dx0a編輯本段x0dx0aC#獨有的特點x0dx0ax0dx0a C#最引人入勝的地方是它和Java的不同,而不是相似的地方.這一節(和這個系列第二部分的大部分地方)講述了C#實現的和Java不同的地方或者Java根本沒有的特點.x0dx0a中間代碼:x0dx0a 微軟在用戶選擇何時MSIL應該編譯成機器碼的時候是留了很大的餘地.微軟公司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機器碼.它也明白許多--如果不是大多數的話--程序員認為Java程序要不可避免的比C編寫的任何東西都要慢.而這種實現方式決定了基於MSIL的程序(指的是用C#,Visual Basic,"Managed C++"--C++的一個符合CLS的版本--等語言編寫的程序)將在性能上超過"解釋性的"Java代碼.當然,這一點還需要得到事實證明,因為C#和其他生成MSIL的編譯器還沒有發布.但是Java JIT編譯器的普遍存在使得Java和C#在性能上相對相同.象"C#是編譯語言而Java是解釋性的,"之類的聲明只是商業技巧.Java的中間代碼和MSIL都是中間的匯編形式的語言,它們在運行時或其它的時候被編譯成機器代碼.x0dx0a命名空間中的申明:x0dx0a 當你創建一個程序的時候,你在一個命名空間里創建了一個或多個類.同在這個命名空間里(在類的外面)你還有可能聲明界面,枚舉類型和結構體.必須使用using關鍵字來引用其他命名空間的內容.x0dx0a基本的數據類型x0dx0a :C#擁有比C,C++或者Java更廣泛的數據類型.這些類型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java一樣,所有這些類型都有一個固定的大小.又象C和C++一樣,每個數據類型都有有符號和無符號兩種類型.與Java相同的是,一個字元變數包含的是一個16位的Unicode字元.C#新的數據類型是decimal數據類型,對於貨幣數據,它能存放28位10進制數字.x0dx0a兩個基本類:x0dx0a 一個名叫object的類是所有其他類的基類.而一個名叫string的類也象object一樣是這個語言的一部分.作為語言的一部分存在意味著編譯器有可能使用它--無論何時你在程序中寫入一句帶引號的字元串,編譯器會創建一個string對象來保存它.x0dx0a參數傳遞:x0dx0a 方法可以被聲明接受可變數目的參數.預設的參數傳遞方法是對基本數據類型進行值傳遞.ref關鍵字可以用來強迫一個變數通過引用傳遞,這使得一個變數可以接受一個返回值.out關鍵字也能聲明引用傳遞過程,與ref不同的地方是,它指明這個參數並不需要初始值.x0dx0a與COM的集成:x0dx0a C#對Windows程序最大的賣點可能就是它與COM的無縫集成了,COM就是微軟的Win32組件技術.實際上,最終有可能在任何.NET語言里編寫COM客戶和伺服器端.C#編寫的類可以子類化一個以存在的COM組件;生成的類也能被作為一個COM組件使用,然後又能使用,比方說,JScript語言子類化它從而得到第三個COM組件.這種現象的結果是導致了一個運行環境的產生,在這個環境里的組件是網路服務,可用用任何.NET語言子類化.x0dx0a索引下標:x0dx0a 一個索引與屬性除了不使用屬性名來引用類成員而是用一個方括弧中的數字來匿名引用(就象用數組下標一樣)以外是相似的.x0dx0a public class ListBox: Control {x0dx0a private string[] items;x0dx0a public string this[int index] {x0dx0a get {x0dx0a return items[index];x0dx0a }x0dx0a set {x0dx0a items[index] = value;x0dx0a Repaint();x0dx0a }x0dx0a }x0dx0a }x0dx0a 可以用一個循環器來匿名引用字元串內部數組成員,就象下面這樣:x0dx0a ListBox listBox = ...;x0dx0a listBox[0] = "hello";x0dx0a Console.WriteLine(listBox[0]);x0dx0a代理和反饋:x0dx0a 一個代理對象包括了訪問一個特定對象的特定方法所需的信息.只要把它當成一個聰明的方法指針就行了.代理對象可以被移動到另一個地方,然後可以通過訪問它來對已存在的方法進行類型安全的調用.一個反饋方法是代理的特例.event關鍵字用在將在事件發生的時候被當成代理調用的方法聲明中.
㈢ c#golang哪個難
對於初學者來說,C# 和 Golang 都有它們的難點和挑戰。以下是一些相關考慮:
C#:
1. C# 是一種對象導向的編程語言,初學者需要理解類、對象、繼承、介面等概念,這會需要一些時間。
2. C# 中有許多高級功能,如多線程、非同步編程、lambda 表達式等,這些功能的學習可能需要一定的預備知識。
3. C# 的語法比較復雜,初學者滲攜腔需要掌握大量的關鍵字和語法規則。
Golang:
1. Golang 的語言特性比較簡單和直白,但是卻還存在一些新的概念。比如介面和 Goroutines 並發,這需要一定的學習和時間。
2. Golang 在編寫 Web 應用方面更為常見,如果你缺乏此方面的經驗,那麼需要學習相關的知識隱檔。
3. Golang 的部分的語法和語言特性可能需要對其底層的理解更深入,所以對於初學者來說也是有一定學習難度的。
總的來言,語言的學習難度會因個人編程背景、知識儲備得到影響。C# 和 Golang 都具有它們的特點和被廣泛使用的領域,初學者應該選叢衫擇最符合自己的需求的。同時,如果已經掌握了一門編程語言,並且有一定的編程經驗,那麼學習C#或Golang會更加輕松。
㈣ 面向對象編程是什麼意思
它是一種編程風格,就是把一切東西看成一個個對象,比如人,車,麵包,等等,然後把這些對象擁有的屬性變數,比如年齡,民族,工作地點,變質期,壽命,還有操作這些屬性變數的函數打包成一個類來表示,這個類的一個抽象就是一個對象,比如人這個類包含一些屬性,比如年齡,名字,住址等,他還有一些對別人告訴這些屬性的功能,比如:說,看,走等!!這就是的面向對象的特點!!!
㈤ cck是什麼意思
cck的意思如下:
「CCK」經常作為「Coca Cola Kid」的縮寫來使用,中文表示:「可口可樂小子」。「CCK」(「可帶卜口可樂小子)釋義英文縮寫詞:CCK。英文單詞:Coca Cola Kid。縮寫詞中文簡要解釋:可口可樂小子。中文拼音:kě kǒu kě lè xiǎo zi
cck是以一個插件的形式安裝到 firefox 上的。安裝好後,再 tools 菜單中,我們並橋就可以看到 cck 向導。
cck 貴為Drupal 的必殺模塊所有踏入cck 大門的初學者都要千辛萬苦的打開這大門那, 讓我借你鑰匙, 輕松地打開它吧假如你有對象導向編程的概念這一切都很相似content type 是 object prototypecck 定義 content typenode 是 object instance。蠢蔽穗
如無, 不打緊, 這篇就是為了沒有概念的人寫的首先, Drupal 內建兩種content typepage, story它們的分別很少, page 預定沒有comment, story 則有content type 像一個集合的稱呼像人類, 動物, 或文具, 是一個統稱每一個content type 有它自己的特性。
㈥ 新手如何學好java編程
首先初學者學習Java,應該從最基礎的開始 :
但是在學習的時候不要圖快,要系統的學習一下,或者在了解Java這一門語言是干什麼,有什麼作用之後,在進行相應的學習:
Java基礎:
1.了解Java的發展;
2. 了解Java虛擬機(JVM)基礎知識,如何一次編譯、多處執行;
3.Java程序如何編譯和運行
4. Java中的變數
5. Java數據類型
6. Java運算符
7. Java中的if-else
8. Java中的Switch-Case
9. Java For循環
10。JavaWhile循環
11. Java中的do-while循環
12.do-while循環。Java Continue語句
13. Java Break語句
14、Java 多線程
15、數組
16、集合
17、面向對象三要素
隨後進階學習:
目前主流的兩個資料庫一個是MYSQL活Oracle,MYSQL是比較好學的,Oracle的操作要稍微復雜一些,我的建議是這兩個資料庫都必須學。資料庫這塊我認為沒有什麼特別難的。只要多練習就可以。
JavaWeb
這也是Java學習的主要內容,非常重要,包括Web前端的內容,比如HTML、CSS、JavaScript等前端常用基礎。JSP、Server、xml、javabean等技術。
框架
這是Java學習過程中的難點,如果前面的Java的基礎沒有學過,後面的框架很難學,所以學習JavaSE的時候一定要掌握好。目前常用的框架是SSH、SMM、Springboot以及SpringCloud主要框架。學習Java可以上B站搜索我校的官方賬號,高淇老師的Java300集免費觀看!
等等,希望可以給大家帶來幫助!
㈦ object-oriented programming 什麼意思
Object Oriented Programming(即OOP),面向對象的程序設計。 所謂「對象」就是一個或一組數據以及處理這些數據的方法和過程的集合。 面向對象的程序設計完升襲猛全不同於傳統的面向禪脊過程程序設計,它大大地降低了軟體開發的難度,使編程就像搭積木一樣簡單,是當今電腦吵橋編程的一股勢不可擋的潮流。
㈧ 編譯java程序的命令是什麼,運行java應用程序的命令是什麼
當前默認目錄為C盤Users文件夾下的Administrator文件夾。一般而言,我們習慣改變當前目錄。由於windows有磁碟分區,若要跳到其他磁碟,例如E盤,有幾種方法:
1、輸入命令: pushd 路徑(此命令可將當前目錄設為所希望的任一個已存在的路徑)
2、輸入命令: e: 轉移到e盤,然後再輸入 cd 轉移到所希望的已知路徑。
希望在windows命令行下使用javac、java、javap等命令,那麼當前電腦必須安裝了jdk,並且將jdk的bin目錄添加到環境變數path下了。
拓展資料:
Java是一種編程語言,被特意設計用於互聯網的分布式環境。Java具有類似於C++語言的「形式和感覺」,但它要比C++語言更易於使用,而且在編程時徹底採用了一種「以對象為導向」的方式。
使用Java編寫的應用程序,既可以在一台單獨的電腦上運行,也可以被分布在一個網路的伺服器端和客戶端運行。另外,Java還可以被用來編寫容量很小的應用程序模塊或者applet,做為網頁的一部分使用。applet可使網頁使用者和網頁之間進行互動式操作。
㈨ java是一種什麼型的語言
Java是由Sun微系統公司所發展出來的程序語言,它本身是一種對象導向(Object-Oriented)的程序語言。JAVA目前在手機上應用最多的就是JAVA游戲。
Java也號稱是能跨平台使用的語言,這主要是因為Java本身被編譯之後,並不是直接產生可執行的碼,而是產生一種中間碼叫作 ByteCode,這種碼必需在透過 Java 的直譯器來解讀它,才能夠真正的被執行,所以只要平台上裝有這種Java的直譯器,就能解讀ByteCode也就能執行Java編譯過的程序,故與 Java程序是在那種平台上被編譯的,就完全沒有干係了。Java寫出來的程序可分為兩類,分別是Java Applet與一般的Application,而Application 這一類就與一般的程序如C++的作用是比較類似的,是一個獨立可執行的應用程序,像HotJava是一個瀏覽器,且就是使用Java程序所發展出來的。最常見的Java程序包括應用程序和applets。應用程序是單獨的程序,諸如HotJava瀏覽器軟體就是用Java語言編寫的。 Applets類似於應用程序,但是它們不能單獨運行, Applets可以在支持Java的瀏覽器中運行。Applet主要是內置於HTML網頁中,在瀏覽時發揮作用。
Java的目標是為了滿足在一個充滿各式各樣不同種機器,不同操作系統平台的網路環境中開發軟體。利用Java程序語言,可以在網頁中加入各式各樣的動態效果。可以放上一段動畫,加入聲音,也可以建立互動式網頁等。
㈩ 什麼是面向對象編程
在我理解,面向對象是向現實世界模型的自然延伸,這是一種「萬物皆對象」的編程思想。在現實生活中的任何物體都可以歸為一類事物,而每一個個體都是一類事物的實例。面向對象的編程是以對象為中心,以消息為驅動,所以程序=對象+消息。
面向對象有三大特性,封裝、繼承和多態。
封裝就是將一類事物的屬性和行為抽象成一個類,使其屬性私有化,行為公開化,提高了數據的隱秘性的同時,使代碼模塊化。這樣做使得代碼的復用性更高。
繼承則是進一步將一類事物共有的屬性和行為抽象成一個父類,而每一個子類是一個特殊的父類--有父類的行為和屬性,也有自己特有的行為和屬性。這樣做擴展了已存在的代碼塊,進一步提高了代碼的復用性。
如果說封裝和繼承是為了使代碼重用,那麼多態則是為了實現介面重用。多態的一大作用就是為了解耦--為了解除父子類繼承的耦合度。如果說繼承中父子類的關系式IS-A的關系,那麼介面和實現類之之間的關系式HAS-A。簡單來說,多態就是允許父類引用(或介面)指向子類(或實現類)對象。很多的設計模式都是基於面向對象的多態性設計的。
總結一下,如果說封裝和繼承是面向對象的基礎,那麼多態則是面向對象最精髓的理論。掌握多態必先了解介面,只有充分理解介面才能更好的應用多態。