我知道原则上可以将C或MATLAB等过程语言转换为面向对象的语言.这个问题在这里和这里都得到了很好的讨论.
我在这些讨论及其中的参考文献中找不到的是对是否应该应用这些原则的说明.这样做有什么具体的东西可以获得吗?这显然是可能的,但建议这样做吗?开源项目中是否有任何例子,这种做法带来了明显的优势?
澄清
也许一个例子是有序的.
我继承了一些实现一些机器学习算法的MATLAB代码.building_model根据传递的标志,基本上只有一个函数可以训练模型或使用它来预测未来值:
building_model('train', ...) % ... stands for the data with which the model is trained
Run Code Online (Sandbox Code Playgroud)
和
value = building_model('predict')
Run Code Online (Sandbox Code Playgroud)
模型本身是用MATLAB持久变量实现的building_model.
我已经building_model分成两个功能,一个用于训练,一个用于预测.以前用作持久变量的模型现在被外部化了,可以这么说:
model = new_model()
model = model_train(model, ...)
prediction = model_predict(model)
Run Code Online (Sandbox Code Playgroud)
粗略地说,就我可以在MATLAB中管理模拟OOP的某些功能而言.我的建筑模型模块现任很像一类,有一个构造函数和两个方法model_train和model_predict.我已经实现了一定程度的封装(虽然没有什么可以阻止调用者摆弄内部的内容model),并且原则上也可以容纳多态性.作为额外的奖励,我几乎免费获得命令/查询分离,因为model_predict不返回model,因此可能不会改变model.
(精明的读者会指出MATLAB已经有一个面向对象的系统.由于各种原因,包括性能和与旧版本的兼容性,我不能使用它.)
我可以想象在C中有一个类似的机制,你可以设计一些数据结构和编写函数,其第一个参数是该数据结构的一个实例.
我想知道的是,我可以在多大程度上推动这种编程方式?这是一种普遍接受的模式(在那里,我说过这个词)?我应该注意哪些性能问题?
language-agnostic oop paradigms design-patterns design-principles
我是REST的新手,但据我所知,我知道以下URL符合REST原则.资源的布局如下:
/user/<username>/library/book/<id>/tags
^ ^ ^ ^
|---------|-----------|---|- user resource with username as a variable
|-----------|---|- many to one collection (books)
|---|- book id
|- many to one collection (tags)
GET /user/dave/library/book //retrieves a list of books id's
GET /user/dave/library/book/1 //retrieves info on book id=1
GET /user/dave/library/book/1/tags //retrieves tags collection (book id=1)
Run Code Online (Sandbox Code Playgroud)
但是,如何优化此示例API呢?比如说我在我的图书馆里有10K书,我想获取我图书馆里每本书的详细信息.我真的应该/library/book/<id>为每个给出的id 强制进行http调用/library/book吗?或者我应该启用多个id作为参数?/library/book/<id1>,<id2>...并且喜欢一次使用100个id进行批量提取?
REST原则对这种情况有何看法?你有什么看法?
再次感谢.
在使用Java应用程序时,大多数时候我会感到一个问题:为什么Java不支持方法的多个返回值?
我知道设计Java的人一定已经考虑了这个主题,但是在思考自己的时候我没有得到任何答案或特定原因。
在OO组件中,当您只有一个实现可用于某个类并且该类未"发布"到其他组件时,是否仍然建议使用接口并使用该接口?
我完全了解"编程到接口"的设计原则,并广泛使用它.
最近,我一直在观察,大多数情况下,从不需要不同的实现(尽管可能并且有意义).由于始终使用接口,应用程序代码将具有相当多的接口,每个接口只有一个实现,并且接口似乎是一种开销.
相反,是否最好只使用具体类并仅在需要第二个实现时引入接口?无论如何,现在使用IDE提取界面是轻而易举的.当引入新接口时,可以更改对旧具体类的引用以使用新接口.
你怎么看?
我已经编程了几年,仍然觉得我的知识不够广泛,不能成为一名专业人士.我研究了一些与设计模式有关的书籍,但我知道还有很多其他书籍.
那么有人可以列出你认为有助于学习成为更好的程序员和更专业的模式和原则吗?
编程语言我的工作:C#,Ruby,Javascript.
我在代码审查期间遇到了以下代码.
我的直觉告诉我,这不遵循适当的OOP.
我认为相反,LoadObject方法应返回一个新的SomeObject对象,而不是修改传递给它的那个对象.虽然我无法真正找到解释为何更好的原因.
我的解决方案更好吗?如果是这样,为什么?特别是在给定的代码示例(如果有的话)中打破了OOP原则或标准?
public void someMethod()
{
...
var someObject = new SomeObject();
LoadSomeObject(reader,someObject);
}
private void LoadSomeObject(SqlDataReader reader, SomeObject someObject)
{
someObject.Id = reader.GetGuid(0);
}
Run Code Online (Sandbox Code Playgroud) GRASP Creator 是否与依赖注入完全矛盾?
如果不是,请解释原因。
design-patterns dependency-injection design-principles grasp
任何人都可以请指出下图的含义:

C#代码也将不胜感激!
请注意,UML来自C#中的敏捷原则,模式和实践.作者:Martin C. Robert,Martin Micah 2006.
添加于2011年6月15日
请执行以下相同的含义:1)一端带三角形的实线2)一端带三角形的虚线
添加于2011年6月3日1日
有什么区别:1)一端带箭头的实线2)一端带箭头的虚线
以下链接中的示例和PersistentObject和ThirdPartyPersistentSet中的示例:
添加于2011年6月3日2日
PolicyLayer和PolicyServiceInterface之间的关系如下:
public class PolicyLayer
{
private PolicyServiceInterface policyServiceInterface = new PolicyServiceInterfaceImplementation();
}
class PolicyServiceInterfaceImplementation:PolicyServiceInterface {}
Run Code Online (Sandbox Code Playgroud)
关于
在关系数据库设计中,有指导设计过程的常规表单.是否有类似的原则适用于像neo4j这样的图形数据库的设计?
特别是,我对问题粒度感到困惑:我可以设计一个图形数据库,其中大多数属性存储在顶点中(联系人具有属性名称,出生日期......)或者我可以将大多数数据存储在关系中(连接与"firtst name"关系的联系到另一个保存实际信息的顶点)或者我可以两者兼而有之(当然会出现一致性问题,但它可能会加快检索时间).
当我开始SQL设计时,这些问题与我的初学者问题类似,许多问题只能通过获得经验来解决.你还可以推荐一本关于这个主题的基础知识的实用书,或者指出我在哪里可以找到一些一般原则?
在我正在使用的这个Node应用程序中,用户可以预定约会。预定约会后,用户将在实际约会前X个小时通过邮件收到提醒。
我正在考虑将Node-schedule用于此任务。
对于每个约会:设置将来的日期,发送一次提醒邮件,然后删除此特定的计划作业
但是...随着应用程序的增长,可能会预约很多约会,这意味着将会有很多Node计划进程同时处于休眠状态并等待启动...
在正常的一天,假装我们为每个客户预订了180个未来的约会,并且假装该应用程序现在有50个客户。这使我们大约有9000个计划中的任务处于睡眠状态并等待启动。
问题:这完全可以吗?...或者所有这些同时安排的任务会很多吗?