Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 面向对象设计问题_Oop_Design Patterns - Fatal编程技术网

Oop 面向对象设计问题

Oop 面向对象设计问题,oop,design-patterns,Oop,Design Patterns,如何设计OO讨论论坛。它将具有哪些类和函数。 谢谢 谁能给我一些建议,让我改进和完成设计 是的,我建议您为这些对象添加一些关系。我希望论坛有用户和主题的集合,因为每一个都只有一个不感兴趣。是的,我建议您为这些对象添加一些关系。我希望论坛有用户和主题的集合,因为每一个都只有一个是不有趣的。我认为,首先要开始的是用例。您打算支持哪些功能?之后,你可以考虑你想上的课程 乍一看,我想到的是,为什么信息不是一个对象。如果它是一个对象,它将更容易操作(例如,删除或隐藏将更优雅)。然而,由于我不知道您的用例,

如何设计OO讨论论坛。它将具有哪些类和函数。 谢谢


谁能给我一些建议,让我改进和完成设计

是的,我建议您为这些对象添加一些关系。我希望论坛有用户和主题的集合,因为每一个都只有一个不感兴趣。

是的,我建议您为这些对象添加一些关系。我希望论坛有用户和主题的集合,因为每一个都只有一个是不有趣的。

我认为,首先要开始的是用例。您打算支持哪些功能?之后,你可以考虑你想上的课程

乍一看,我想到的是,为什么信息不是一个对象。如果它是一个对象,它将更容易操作(例如,删除或隐藏将更优雅)。然而,由于我不知道您的用例,我不确定它是如何工作的


如果您希望论坛包含
主题
,则您的
主题
论坛
应该是多对一关系。同样,我不确定您的用例,但有一个建议是为每个论坛提供一个子论坛列表(我的意思是
论坛[]子论坛
)和一个指向更高论坛的可选链接。因此,您可以分层组织论坛。

我认为,首先要做的是用例。您打算支持哪些功能?之后,你可以考虑你想上的课程

乍一看,我想到的是,为什么信息不是一个对象。如果它是一个对象,它将更容易操作(例如,删除或隐藏将更优雅)。然而,由于我不知道您的用例,我不确定它是如何工作的


如果您希望论坛包含
主题
,则您的
主题
论坛
应该是多对一关系。同样,我不确定您的用例,但有一个建议是为每个论坛提供一个子论坛列表(我的意思是
论坛[]子论坛
)和一个指向更高论坛的可选链接。因此,您可以按层次组织论坛。

让我们从一个场景开始

论坛用户Joe查看该网站

Joe在上输入论坛的URL 他的浏览器

乔登录论坛。他选择 要登录的选项 下次自动

Joe看到了他的论坛列表,分组 分为类别,包括标题和 简短描述

还有其他论坛,但他看不见 那些

包含新主题或新主题的论坛 自上次会议以来对主题的回复 论坛上的评论都很突出

Joe使用浏览器查看其中一个论坛 自他上次访问以来的活动。他 按顺序查看主题列表 上次活动(创建日期或 新主题或上次答复日期)

自上次查看Joe以来,主题已更改 它们被突出显示

Joe看了一些已经讨论过的话题 自从上次访问以来,情况发生了变化。这个 主题和任何答复都列在中 创建顺序(非修改)- 可以编辑主题和回复,但 这不会改变顺序)

主题有主题行、标记和 作者姓名、创作日期和出版日期 最后一次编辑,和一个主体。乔上映了 除上次编辑日期外,所有这些 仅当它不同于时才显示 创建日期。答复刚刚收到 作者姓名、创建日期和 上次编辑日期。最后一次编辑 仅当日期不是当前日期时才显示 与创建日期相同

乔重温了他的文章列表 论坛。这一次,他的文章 现在已经看不到了 突出显示,但其他文章 自从上次访问后,他改变了 还没有读过

乔重温了一篇文章,并发表了一篇评论 答复其他答复之一。这个 包括该答复的正文, 引用,作者归属,在 编辑打开窗口等待他的答复。他 删除部分正文并添加他的 我自己的反应。他选择了“发送”并被选中 回到话题上来

有人警告他,另一个答复已经提出 是在他编辑时添加的,并且 被要求确认他还想 邮递他确认了,并返回到 主题显示并添加了他的回复 到最后。他回到论坛。 刚才添加的主题不是 突出显示,因为进行了更改 是他干的

现在,这个功能可能比你想的要多。但是,如果您确实想支持它,它会影响您的设计(显然)。我的观点是,您必须确定用例和要支持的功能,以便说明一个设计是否足够,或者它缺少什么,或者它将使什么难以实现

从上面的场景中,我们可以提取一些用例。我们还可以确定需要进入域模型的内容-用户、论坛、主题、回复,以及这些内容的一些属性-上次修改的日期-和操作(按类别列出的论坛列表、按日期顺序列出的每个论坛的主题列表等)

我建议首先集中精力识别关键域对象和操作,因为这样可以让您推迟决策。例如,您需要一个操作“自用户上次访问后主题已修改”,但您不需要确定主题是否知道用户何时访问了哪些主题,或者用户是否知道何时访问了哪些主题。事实上,如果您的高级/接口设计只指定了操作,那么您使用的操作可以是一个实现细节,并且可以在任何时候进行更改,而不会影响其他操作

假设你的问题来源于作业的措辞,注意你说的

“它将包含哪些类和函数 有。”

。这些类不会有什么字段,尽管问题中的代码主要涉及这些字段。因此,作业要求您了解以下几点:
  Class User 
    {
     $name;
     $useid;
    $fname;
    $lname;
    Topic createTopic() ;
    postMessage(Topic topic_id);
    login ($userid)
    logout($userid)

    }

    Class Adminuser extends User
    {
       CreateForum()
    }

    Class Normaluser extends User
    {

    }

    Class Forum
    {
     Topic[]  topic_objs;
    $forum_id;
    $forum_name;
    $forum_desc;
    getAllTopics();
    }


    Class Topic
    {
    $topic_id;
    $topic_name;
    $topic_desc
    Replies[] reply_objs ;
    getAllMessages() ;

    }

    Class Replies
    {
       Topic topic_obj;
       $content ;
      }
    Class Site 
   {
     Users[] users_obj;
     Forum[] forums_obj;
   getUsersList();
   getForumsList();

   }