Fru*_*ngi 32 c++ java oop uml class-design
我无法理解类与其方法的关系.是一种方法的东西,对象做,或东西是做给它?或者这完全是一个不同的概念?
具体来说,在图书馆的软件系统中,该borrow()方法是属于代表图书馆顾客的类,还是代表顾客借用的项目的类?我的直觉是,它应该patron.borrow(copy)像英语句子结构一样subject.verb(object); 但我的导师说这是错的,我不明白为什么他会borrow()属于这个Copy班级(他并没有真正解释过这个问题).我不是在寻找理由,但有人可以解释一下这种正确的关系吗?
编辑:此问题已被关闭为"非主题".我不明白.软件设计问题不适合本网站吗?
Rya*_*des 12
主观:)但老实说,我会使用信息专家模式并说出类似的东西
library.lend(item, patron)
Run Code Online (Sandbox Code Playgroud)
该库包含有关其所具有的项目的信息(可能在其目录中).
图书馆将该项目借给顾客(它知道因为它注册了它们)
不确定你的教师如何看待这一点,但这是对你的场景有意义的"抽象"(模仿现实世界实体的软件对象)的水平.
650*_*502 10
您不应该将OOP的概念与Java或C++这样的特定化身混淆.
这个限制"方法是对象的属性"不是OOP概念的一部分,而只是一些实现的一部分,并且正如您发现它不能很好地扩展.
"整数"对象有多少种方法?什么更合乎逻辑...... myfile.write(myint)或者myint.write(myfile)?对此没有什么好的一般答案.作为单个对象的一部分的方法的想法是一种特殊情况,并且有时将问题适合于该解决方案所需的弯曲可以变得显着或者甚至接近于一个显示器.只有当一个方法除了正在处理的对象之外没有参数时,答案才真正完全可以接受:只有涉及单一类型时,单个调度才是完美的答案.
在其他语言中,您将对象和方法分开,例如,您有文件对象,整数对象和write(myfile, myint)描述在需要操作时要执行的操作的方法...此方法既不是文件的一部分也不是文件的一部分也不是整数.
首先是一些通用词.
软件构建不应该由英语规则或"美"或其他任何东西来管理,它是工程学科.想想你的设计是否解决问题,是否会维护,是否会检验的,是否将有可能并行开发等等.如果你想要更正式的东西,请看DL Parnas的"关于将系统分解为模块的标准".
至于你的图书馆例子.想象一下,你有一个库外的副本,那么它有borrow方法吗?借款是如何登记的?您是否可以使用负责数据存储的Copy或Patron类?放入borrowLibrary类看起来更合适.职责是分得很清楚,你不会需要很了解借款来实现复制和赞助人,你不需要对他们太多的细节来实现图书馆.