2014-04-23 68 views
1

我有一個朋友正努力學習OO編程(在計算機科學課上),主要是,我相信,由於他不瞭解「類型」和實際「實例」之間的相關性/差異。理解數據如何存儲似乎是一個問題。他知道變量,控制結構和一些算法,但我認爲理解範圍和在Java中定義對象的方式讓他感到困惑。最容易混淆的部分是「模板」部分,其中定義了方法和變量,但是由每個對象「擁有」。正如這篇文章所展示的那樣,即使我知道我正在向人們解釋這個概念,我也很難解釋這個概念。如何讓朋友停止思考全球並開始思考親屬?

所以我想知道的是,如何清楚地向他解釋實例和類(作爲一種類型,與實際數據)。我認爲他知道基本概念,但並不完全理解類型和數據之間的區別,以及數據如何傳遞。


更多信息:

這裏的那種混亂的他正經歷。我們正在重寫GridWorld中的一個Critter對象(可怕的AP測試對象)。無論如何,我們都想重新定義一些方法。他會最終嘗試使用方法作爲屬性(很可能是一個錯字,但也因爲像GetLocation()這樣的東西可能會令人困惑),或者他會嘗試對錯誤的變量使用方法,或者不使用方法正確的變量類型。

「Integer nameHere」和「nameHere Integer」之間的區別讓我覺得很困惑。當他應該做nameHere.equals()時,他可能會嘗試執行Integer.equals()。我向他展示API,但我認爲這只是令人困惑。

你怎麼解釋的類型和變量之間的差異,但不僅如此,但顯示一個變量都可以有其他變量的原因,如何當你寫

public getSomething() 
{ 
    return something; 
} 

您都可以從具體的數據你實例化的類,哦,順便說一下,每個單獨的對象都不一樣?

我該如何讓他停止思考「全球化」並開始思考「親戚」?你如何解釋「親戚」?

回答

4

我喜歡用電視解釋面向對象的概念。有「電視」作爲一堂課,但那裏有你的電視,在你家裏。它可以做所有電視可以做的一些事情,如顯示圖片,打開和關閉等。

但它也有一個局部定義的範圍,因爲它是世界上電視類的一個實例。如果你在紐約市的電視機上輸入頻道32,你會得到一件事。如果你在班加羅爾做,你會得到別的東西。輸入頻道就像撥打電視的setChannel(int channel)方法一樣。

這樣的真實世界對象的用戶並不奇怪他們以這種方式工作。我對這個問題的建議是停止使用抽象和技術語言來描述基本概念。計算機科學中有很多東西不能用現實世界中的物質對象來解釋,但這不是其中之一。

0

人能想到類作爲模具,如模具定義的最終產品會是什麼樣子,類定義什麼,所有數據都被存儲,如何可以檢索,訪問等

一個可以把原材料在模具中,並獲得產品並開始使用它。 同樣,可以創建一個Class的實例並開始使用它。每個對象都可以容納不同的數據(比如在模具中你可以放置綠色液體,紅色液體等),但是隻有一種方法可以訪問定義了我的類語義的數據(如模具產品的最終形狀將是相同的)。

希望它有幫助