Questions tagged «object-oriented»

一种使系统能够建模为一组对象的方法论,这些对象可以模块化方式进行控制和操作

6
偏爱OOP语言后如何思考C程序员?[关闭]
以前,我只使用过面向对象的编程语言(C ++,Ruby,Python,PHP),现在正在学习C。我发现很难找出用一种没有概念的语言来做事的正确方法。 '宾语'。我意识到可以在C语言中使用OOP范例,但是我想学习C语言惯用的方式。 解决编程问题时,我要做的第一件事是想象一个可以解决该问题的对象。使用非OOP命令式编程范例时,我可以用哪些步骤替换它?

5
通过对象本身的方法还是通过另一个类保存对象?
如果要保存和检索对象,是否应该创建另一个类来处理该对象,还是最好在该类本身中进行处理?还是混合两者? 根据OOD范式推荐哪个? 例如 Class Student { public string Name {set; get;} .... public bool Save() { SqlConnection con = ... // Save the class in the db } public bool Retrieve() { // search the db for the student and fill the attributes } public List<Student> RetrieveAllStudents() { // this …

6
为什么“功能与数据之间的紧密耦合”不好?
我在第40页的“ Clojure的喜悦 ”中找到了这句话。32岁,但上周晚饭时有人对我说了同样的话,我在其他地方也听说过: [A]面向对象编程的缺点是函数和数据之间的紧密耦合。 我理解为什么不必要的耦合在应用程序中不好。我也很高兴地说,即使在面向对象的编程中,也应避免避免可变状态和继承。但是我看不到为什么在类上粘贴函数本质上是不好的。 我的意思是,向类添加功能似乎就像在Gmail中标记邮件,或将文件粘贴在文件夹中。这是一种组织技巧,可帮助您再次找到它。您选择一些条件,然后将类似的东西放在一起。在OOP之前,我们的程序几乎是文件中方法的一大包。我的意思是,您必须将函数放在某个地方。为什么不组织它们? 如果这是对类型的公开攻击,为什么他们不只是说将输入和输出的类型限制为一个函数是错误的?我不确定是否可以同意这一点,但是至少我对pro和con类型安全性论点很熟悉。在我看来,这似乎是一个主要的问题。 当然,有时人们会错误地将功能放在错误的类上。但是与其他错误相比,这似乎是一个很小的麻烦。 因此,Clojure具有名称空间。在OOP中将函数粘贴在类上与在Clojure中将函数粘贴在命名空间中有什么不同,为什么这么糟?请记住,类中的函数不一定只在该类的成员上运行。看一下java.lang.StringBuilder-它可以对任何引用类型进行操作,也可以通过自动装箱对任何类型进行操作。 PS此引用引用了一本书,但我没有读过:《Leda中的Multiparadigm编程》:Timothy Budd,1995年。

7
作为独立的初级开发人员,我如何审查自己的进度[关闭]
我目前在一家2人公司工作,担任主要开发人员。我的老板得到了客户,模拟了一些png设计模板并将其交给我。 这个系统运行良好,我真的很喜欢它。 我从事的项目类型是针对中小型企业的,他们通常需要CMS系统。从头开始开发,我将为客户构建定制的后端,以添加/编辑/删除类别,标签,产品等,然后根据交给我的设计模板将它们输出到前端。随着时间的流逝,项目变得越来越复杂,具有购物车/订购功能和其他常见的电子商务类型功能。 同样,该系统运行良好,我真的很喜欢它。 我的问题是我作为程序员的个人发展。我有很多业余时间阅读编程博客,通过stackexchange进行检查,阅读建议的编程书籍(目前为止在“ The Pragmatic Programmer ”上,到目前为止还算不错),进行脑部锻炼(lumosity.com和khanacademy数学问题),做了很多工作。体育锻炼和其他个人发展型活动。 但我不禁感到,我在反馈,评论方面漏了一点。我的老板很棒,从来没有对我的工作赞不绝口,但是不幸的是他要么忙于检查我的代码,要么说实话,我不认为这是他的专业之一,因此无法提供反馈。 我想知道我在做错什么,在做正确的事情。我是否应该在控制器中添加这么多的逻辑,是否对代码进行足够的调制等? 因此,我所做的就是开发了一个小型的“家庭预算”应用程序,并尝试按照我目前所知道的那样干净有效地进行操作。 我想知道的是,我可以在哪里提交此应用程序,并请一些经验丰富的开发人员提供反馈。这不仅是我的代码的一个子部分,如“ codereview.stackexchange”似乎需要,而且我的整个工作流程都需要批评。 我知道这是一个要问的问题,我希望给出的主要建议是在团队中寻找工作,这当然是我以后将要研究的内容,但是现在我想坚持我的当前做法。就业情况,但只是不想养成太多的坏习惯。 让我知道是否可以提供进一步的信息以帮助澄清,或者如果这不是我事先表示歉意的合适位置。不想使用reddit,因为我觉得这个社区培养了更多经过深思熟虑的回应。

5
密码或对象?
在提供用于获取域实体的业务逻辑方法时,该参数应接受对象还是ID?例如,我们应该这样做: public Foo GetItem(int id) {} 或这个: public Foo GetItem(Foo foo) {} 我相信整个传递对象,但是在这种情况下,我们得到一个对象,而我们只知道ID,该怎么办?调用方应该创建一个空的Foo并设置ID,还是应该将ID传递给方法?由于传入的Foo除了ID以外都是空的,因此我看不到调用方必须创建Foo并设置ID的好处,因为它可以将ID发送给GetItem()方法。

11
仅限构造方法的子类:这是反模式吗?
我当时正在与一位同事进行讨论,但最终我们对继承的目的产生了矛盾的直觉。我的直觉是,如果子类的主要功能是表达其父级的可能值的有限范围,则它可能不应该是子类。他主张相反的直觉:子类化表示对象的“特定性”更高,因此子类关系更合适。 更具体地讲,我认为如果我有一个扩展父类的子类,但是该子类覆盖的唯一代码是构造函数(是的,我知道构造函数通常不会“重写”,请耐心等待),然后真正需要的是一种辅助方法。 例如,考虑一下这个现实生活的类: public class DataHelperBuilder { public string DatabaseEngine { get; set; } public string ConnectionString { get; set; } public DataHelperBuilder(string databaseEngine, string connectionString) { DatabaseEngine = databaseEngine; ConnectionString = connectionString; } // Other optional "DataHelper" configuration settings omitted public DataHelper CreateDataHelper() { Type dataHelperType = DatabaseEngineTypeHelper.GetType(DatabaseEngine); DataHelper …

9
在编写面向对象的代码时,我是否应该始终遵循设计模式?
任何面向对象的程序都有可想像的设计模式吗?我之所以这么问,是因为最近我看到了带有的Door类的实现Lock。这是测试的一部分,回答说代码遵循Null Object模式: class Lock { public: virtual void close() = 0; virtual void open() = 0; virtual bool is_open() const = 0; virtual ~Lock() { } }; class DummyLock : public Lock { private: DummyLock(); DummyLock(const DummyLock&) = delete; DummyLock& operator=(const DummyLock&) = delete; private: void close() { } void …

11
抽象类/方法过时了吗?
我曾经创建许多抽象类/方法。然后我开始使用接口。 现在,我不确定接口是否不会使抽象类过时。 您需要一个完全抽象的类吗?创建一个接口。您需要一个带有一些实现的抽象类吗?创建一个接口,创建一个类。继承该类,实现接口。另一个好处是某些类可能不需要父类,而只实现接口。 那么,抽象类/方法是否过时了?

17
我如何对自己的编程技能更有信心?[关闭]
编程对我来说并不陌生。我最初在12岁时开始做标记(HTML,现在请不要嘲笑我),在13岁时我开始做一些BASIC编程(此时我对Flowcharts,Pseudocodes非常了解),但后来我被告诫高中时期的生物学,因此错过了诸如C,Java等语言的“真实”编程知识。我为UG BE学习了CS(与BS类似,但更理论化)。我自己(在较小程度上)学习了C&C ++(我的教授感到非常痛苦,并且课堂上充斥着代码小丑(谁在学校已经学过了,因此没有注意课堂,也没有让像我这样的小凡人也不必专心听课)),并可以制作出很棒的加法或乘法程序(现在甚至是花木园的程序) 我的主要问题是,我总是对自己有限的编程技能感到不足和窒息,而对代码丑陋不屑一顾(相信我,我在很久以前就遇到过这个网站,但现在可能会鼓起勇气进行实际发布一个问题),有时甚至因上述无能而感到沮丧。大多数人说,编程不一定与语言有关,而是与人的心态以及他们用来解决问题/问题的技术有关。我同意这样的观点,但是我能获得这样的“心态”吗?如果这样的话,我应该如何进行“编程/编码”?如果有什么设定的方法和步骤可以最有效地达到“禅宗”呢?编码”。我该怎么做?同样,如果某些圣徒想指导这件被压倒的$#!^也不会有什么坏处。 PS:我将永远感激任何认为我值得他们度过时光的人,并且作为奖励,我将命名为我随他们发行的第一款软件。(如果我要运送一个,即) TL; DR:从未真正学习过“编程/编码”,即使我尝试也无法解决问题。帮我!

5
与定义一个方法可以调用相比,如何定义一个方法可以被覆盖更强的承诺?
来自:http : //www.artima.com/lejava/articles/designprinciples4.html 埃里希·伽玛(Erich Gamma):即使十年之后,我仍然认为这是真的。继承是改变行为的一种很酷的方法。但是我们知道它很脆弱,因为子类可以轻松地对调用其重写的方法的上下文进行假设。基类和子类之间存在紧密的耦合,因为隐式上下文将在其中调用我插入的子类代码。合成具有更好的属性。通过将一些较小的东西插入较大的对象中,可以减少耦合,而较大的对象仅将较小的对象回调。从API的角度来看,定义可以覆盖的方法比定义可以调用的方法要强。 我不明白他的意思。有人可以解释一下吗?

8
对象的功能是否应仅由其实现的接口来标识?
C#的is运算符和Java的instanceof运算符允许您在已实现对象实例的接口(或更不幸的是,其基类)上分支。 根据接口提供的功能,将此功能用于高层分支是否合适? 还是基类应该提供布尔变量以提供一个接口来描述对象具有的功能? 例: if (account is IResetsPassword) ((IResetsPassword)account).ResetPassword(); else Print("Not allowed to reset password with this account type!"); 与 if (account.CanResetPassword) ((IResetsPassword)account).ResetPassword(); else Print("Not allowed to reset password with this account type!"); 使用接口实现进行功能识别是否有陷阱? 这个例子就是一个例子。我想知道一个更通用的应用程序。

2
为什么采用数量不受限制的参数的方法通常会定义带有较少参数的重载?
例如,System.IO.Path.Combine.NET中的方法具有以下重载: Combine(params String[]) Combine(String, String) Combine(String, String, String) Combine(String, String, String, String) 最后三点是什么? 第一个将覆盖所有内容,就好像您仔细观察一样,它使用的是params关键字。向后兼容的论点仅涵盖该Combine(String, String)变体,因为它是.NET 4之前的唯一版本。

8
我们何时真正使用面向对象的编程?[关闭]
我正在用Python编写一个程序,该程序基本上可以操作字符串,而我想知道是否应该使用OOP原理来执行它。客户确实告诉我他不在乎代码,他只是想把事情做好。 我知道,面向对象的代码从定义上讲不是更干净,相反,非OO代码从定义上讲并不是很糟糕。我要提出的问题或多或少是基于意见的,但可能有一些我不知道的规则。 有关要执行的操作的更多信息: 解析.csv文件并根据配置文件处理数据(列可能不同,例如列数或它们保存的数据) 使用以上处理的数据创建新的自定义格式的数据(或基于上述某些值的多个文件) 使用最后格式化的数据来创建XML文件。 根据XML文件XML的内容将XML文件拆分为多个 该应用程序应基于CLI 当然还有其他事情,例如:记录一些事件,解析CLI参数等等。 现在,这根本不是一个很大的应用程序,也几乎完成了,但是在整个开发过程中,我一直在问自己是否应该使用OOP来完成。 所以,我的问题是:你们如何知道/决定何时在应用程序中使用OOP?

5
什么时候应该扩展Java Swing类?
我对继承实现的当前理解是,只有存在IS-A关系时,才应该扩展类。如果父类可以进一步具有具有不同功能的更特定的子类型,但将共享在父类中抽象的公共元素。 我质疑这种理解,因为我的Java教授建议我们这样做。他建议JSwing我们在课堂上建立一个应用程序 一个都应该延伸JSwing类(JFrame,JButton,JTextBox等)到单独的自定义类和在其中指定GUI相关的定制(例如部件尺寸,部件的标签,等) 到目前为止还算不错,但是他进一步建议每个JButton应该有自己的自定义扩展类,即使唯一的区别是标签。 例如,如果GUI有两个按钮,则“ 确定”和“ 取消”。他建议应将它们扩展如下: class OkayButton extends JButton{ MainUI mui; public OkayButton(MainUI mui) { setSize(80,60); setText("Okay"); this.mui = mui; mui.add(this); } } class CancelButton extends JButton{ MainUI mui; public CancelButton(MainUI mui) { setSize(80,60); setText("Cancel"); this.mui = mui; mui.add(this); } } 如您所见,唯一的区别在于setText功能。 那么这是标准做法吗? 顺便说一句,讨论该课程的课程称为Java最佳编程实践 [教授回覆] 因此,我与教授讨论了这个问题,并提出了答案中提到的所有观点。 他的理由是子类在遵循GUI设计标准的同时提供了可重用的代码。例如,如果开发人员在一个窗口中使用了自定义Okay和Cancel按钮,则将相同的按钮放置在其他Windows中也将变得更加容易。 我知道了我想起的原因,但它仍然只是在利用继承并使代码易碎。 …

5
创建另一个类的ClassCollection是一个好习惯吗?
可以说我有一Car堂课: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } 可以说,我们正在建立一个有关停车场的系统,我将使用很多Car类,因此我们建立了一个CarCollection类,它可能有一些类似的方法FindCarByModel: public class CarCollection { public List<Car> Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.