2012-11-21 49 views
1

我要創建以下功能(在Matlab命令行賭場):定義特定Matlab的階級結構

function [wonAmount, noGuesses] = highLow(gambledAmount) 
function [wonAmount, noPulls] = slotMachine(gambledAmount, betFactor) 
function wonAmount = roulette(gambledAmount, typeOfBet) 

這是我給出的任務的事,它必須是實現。我可以創建簡單的函數,因爲所有的遊戲都有一些相似的特徵,計算wonAmount等,並且通常OOP更加結構化,我想在Matlab中嘗試它(OOP)。

我可以創建句柄類,但我必須完成任務的要求。哪一個類的方法處理句柄 - 我的理解是句柄類構造函數必須返回對象本身?我正在尋找一個類,其中構造函數不一定返回構造函數 - 一種靜態類/函數的一種?

你將如何設計這個類?

+0

不知道這是你在找什麼,但[單件模式](http://en.wikipedia.org/wiki/Singleton_pattern)(私有類的構造函數,用靜態方法返回單實例) – Amro

+0

看着你的其他鏈接的問題,它看起來我是你正在創造類錯誤的原因,如果你只是使用它們的靜態功能,沒有「狀態」封裝.. – Amro

回答

2

這聽起來像你需要接口到你的程序看起來像函數調用,但內部你想使用面向對象編程。是對的嗎?

假設您需要的接口看起來像:

[wonAmount, noGuesses] = highLow(gambledAmount) 

你可以寫的highLow函數,它裏面的代碼:

function [wonAmount, noGuesses] = highLow(gambledAmount) 
game = highLowGame; %instantiate the game, and run it: 
[wonAmount, noGuesses] = highLowGame.run(gambledAmount); 

或者您可以使用靜態方法:

function [wonAmount, noGuesses] = highLow(gambledAmount) 
[wonAmount, noGuesses] = highLowGame.runGame(gambledAmount); 

http://www.mathworks.com/help/matlab/matlab_oop/static-methods.html

如果我假設highLowGame.m看起來是這樣的:

classdef highLowGame < casinoGame 

有沒有很好的理由使用手柄類這一點,除非你真的想要一個特定調用語法/手柄行爲......

如果由於某種原因,你需要將這一切全部放在一個M文件中,那麼恐怕你運氣不好......但這似乎是一個愚蠢的限制。

+0

是的。我希望在內部使用面向對象,並確保我符合項目要求。我明天將和我的講師談談這個問題 - 他們有多嚴格。但我認爲我會根據您的建議和靜態方法,從函數中調用該方法。感謝您的輸入。 –

+0

是否存在與Matlab self :: callFunction()相當的Matlab,因此我不必在靜態類中硬編碼對象名稱? –

+0

不太清楚你的意思;你能給個例子嗎?這可能是一個合理的單獨的stackoverflow問題 – Pete