2013-10-19 71 views
2

我正在研究一段代碼,其中幾個元素可以有一個方向,這意味着它們的空間位置相對於參考框架。作爲繼承的替代的泛型編程概念

我可以創建一個名爲OrientedObject的抽象基類,然後是一組作用於此類實例的算法集合。我也可以定義我自己的oriented概念,並寫出符合類型的通用算法,以滿足概念(類似於Boost Geometry Library的設計)。

依據升壓Generic Programming Techniques頁:

一個概念是一組由有效表達式, 相關的類型,不變量,和複雜性擔保的要求。據說模型化概念的類型是 滿足要求。一個概念可以延伸另一個概念的要求,這就是所謂的 細化。

因此,oriented概念可以定義爲需要的類型(如矢量),有效的操作(如rotate)的集合,等

在我看來,如果繼承模型是一個關係,和一個概念限定東西是否爲,則概念表示繼承的一種形式,這恰好是更實用的和可擴展的(沿鴨打字的線),如果還更智力複雜的定義正確。

現在,如果需要創建相關類型的容器,則需要繼承。例如,我不能創建一個面向類型的容器,除非它們屬於同一個基類。

因此,我很難決定是否根據concept或繼承的方式定義我的概念(我無法想到任何其他形式)。

你能提供任何指導嗎?

+4

當且僅當您需要管理異常集合的對象,這些對象的類型只在運行時知道,但無法靜態知道。否則,您可以將所有類型靜態分開。 –

+0

@KerrekSB我需要將這些傢伙的單個集合保存到我的程序的一個非常特定的部分中......似乎只是因爲我將不得不依賴於繼承......我本來希望使用概念.. 。 好吧... – Escualo

回答

-1

後2

閱讀泛型從Java圖書的概念後,它只是提供了一種機制,強制類型檢查,所以我實在不明白仿製藥的權力。 C++是強類型的,它直接忽略了泛型。 Python依賴隱式變量聲明的泛型。這聽起來像你想創建一個新類型,但最後你有一個簡單的數字表示矢量。

這聽起來像你想要什麼被描述爲多態代碼。也就是說,你有一組共同的數據,並且你想要輸入相關的代碼執行。也就是說,你有共同的起點,你會進行某種檢查,檢查的結果執行一組特定的代碼。

有很簡單的方法可以做到這一點,最優雅的是與輸入接口。

回到原來的職位:

如果您只是具有有一個方向,你可以做幾個元素,隨着蟒蛇兩個列表。

第一個列表是元素。第二個列表是每個元素的方向,您可以使用兩個嵌套for循環來重複列表。

編寫您的算法並開始在for循環內調用您的列表。

Python對於「數據科學家」來說非常適用,當您需要輕鬆讀取數據,處理數據,寫入數據和製作自定義工作流時,python可以讓您比C++更容易執行操作,因爲動態列表和迭代器。

如果您的問題需要抽象解決方案,則只需要繼承。例如,模擬生活以及所有不同類別的哺乳動物都非常棒。您將使用繼承的力量來定義抽象類哺乳動物哺乳動物的層次結構。然後,如果你希望他們都在你的模擬中行走,那麼走路對於生活是必要的。因此,原則上通過界面定義Walk更爲正確。
界面只是您定義的所有哺乳動物必須實施的必要方法。這是一個在C++中實現接口的簡單例子。 how to implement Interfaces in C++?

,必須實現斷走需要我的頭頂部的一些功能是:ConsiousState,PurposeOfMovement,LegFunction1,LegFunction2,

由於腿的數量不是恆定的,這個問題必須用抽象類抽象出來。

總之,您可以定義您的問題的程度越高,並將您所知道的和您不知道的內容分類,即可獲得更高效的解決方案。如果你知道你的工作內容以及它們的屬性和測量數據的單位,那麼你就很好,甚至可能不需要抽象,因爲你的問題範圍是明確定義的。