gpt4 book ai didi

oop - 面向对象设计问题

转载 作者:行者123 更新时间:2023-12-04 20:09:25 24 4
gpt4 key购买 nike

我有一个系统,我必须在其中建模 household ,其中有一个 TVSubscription .这可以是 digital一个,或一个 analog一。

一个 user登录 SetTopBox .然后他可以租Movies .

所以目前的方案如下:

//Existing instantiated variables in scope
aMovie
aUser
aSetTopBox
//End

--> execute this command:
aUser rent: aVideo on: aSTB

Code:
User>>rent: aVideo on: aSTB
aVideo rentBy: self on: aSTB

Video>>rentBy: aUser on: aSTB
aUser rentActionMovie: self on: aSTB

User>> rentActionMovie: aMovie on: aSTB
aSTB rentActionMovie: aMovie by: self

STB>>rentActionMovie: aMovie by: aUser
(loggedInUser isNil)
ifTrue: [ loggedInUser := aUser.
--Do stuff to charge the movie]
ifFalse: [ -- Show error that user is not logged in]

从技术上讲,这是正确的。但是我有(抱歉是肛门)问题:

我要通过 aSTB 2 方法调用下来最终使用它。这里需要双重调度,因为我有 ChildAdult他们可以租 AdultMovieChildrensMovie .因此我使用双重调度而不是类型检查(要求)。因此我想到了以下解决方案:

我可以储存 currentlyLoggedInaSTB ,并存储一个 loggedInOnaSTB .然而,这使得对象相互指向。

我的直觉告诉我这是一种难闻的气味。我不太确定如何解决它。

理想情况下,我想做这样的事情:
aUser rent: aMovie.

最佳答案

第二种选择...

STB>>initialize
aUser := UserNotLoggedIn new.

STB>>login
aUser := self getUserFromAuthorisationCheck

STB>>rentMovie: aMovie by: aUser
(aUser canRent: aMovie)
ifTrue: [ --Do stuff to charge the movie]

UserNotLoggedIn>>canRent: aMovie
self displayErrorUserNotLoggedOn
^false

User>>canRent: aMovie
aMovie ratingAge <= self ratingAge.

AdultMovie>>ratingAge
^18

Adult>>ratingAge
^18

ChildrensMovie>>ratingAge
^10

Child>>ratingAge
^10

User>>rent: aMovie
aSetTopBox rentMovie: aMovie by: self

关于oop - 面向对象设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20615352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com