Questions tagged «object»

13
OOP中的对象是否必须代表实体?
对象是否必须代表实体? 由一个实体我的意思是这样一个Product,Motor中,ParkingLot等,物理,或甚至一个明确的非物理概念对象-这被很好地定义,其中一些核心数据清楚地属于对象的东西,以及一些功能/方法显然对核心数据起作用。 例如,我可以有一个对象,Demon它本身是一个实体,一个虚构的对象,也许不是物理的,但仍然是一个实体 一个对象可以仅仅是方法的集合,一组与一个共同目标相联系的通用过程吗? 示例:可以在没有实体的情况下调用MotorOperations或的类MotorActions,但是该类内部的方法可以执行以下操作 getMotorDataFromHTMLForm() getMotorManufacturers() selectMotorFromUserRequirements($ requirements) canMotorCanHandleOperatingConditions($ conditions) computePowerConsumptionForMotor($ id) 通常将类定义为对象的中心数据+数据操作。因此,Motor对于可能存在一些与电动机规格有关的电动机变量,并且可能存在将这些数据组合以产生某些结果的操作。 就我而言,这更像是我有一个对数据+ 通过该类传递数据的操作的类,除了临时传递类数据之外,没有任何以“ Motor Operations”为中心的数据。 题 类可以表示无实体的对象吗?如果不是,为什么它们不好/不完整/不以OOP为中心?有什么方法需要在概念上进行更改/改进以符合OOP?

8
如何证明或反对“上帝的物体”是错误的?
问题摘要: 长话短说,我继承了代码库和不允许更换的开发团队,使用God Objects是一个大问题。展望未来,我想让我们重构事情,但是我从那些想与God Objects一起做所有事情的团队中得到了回击,“因为它更容易”,这意味着我将无法重构。我以多年的开发经验为后盾,我是受雇来了解这些事情的新老板,等等,第三方离岸公司的销售代表也是如此,现在这是在执行层和我的会议上现在是明天,我想投入大量技术弹药以倡导最佳实践,因为从长远来看,我认为这对于公司而言会便宜得多(而且我个人认为这是第三方所担心的)。 我的问题是从技术角度讲的,我知道它的长期稳定性,但是我在超短期和6个月期限方面遇到了麻烦,尽管我“知道”我无法通过引用和引用的资源来证明这一点。一个人(罗伯特·C·马丁,又名鲍勃叔叔),因为我被告知要从一个人那里获得数据,而只有一个人(罗伯特·C·马丁)的论点不够好。 题: 我可以直接引用一些本领域知名专家的资源(标题,出版年份,页码,报价),这些资源明确表示对“上帝”对象/类/系统的这种使用不好(或很好,因为我们正在寻找)技术上最有效的解决方案)? 我已经做过的研究: 我在这里有很多书,并且已经搜索了它们的索引以查找单词“ god object”和“ god class”的使用。我发现奇怪的是它几乎从未使用过,例如我所拥有的GoF书的副本就从未使用过(至少根据我面前的索引),但是我在下面的两本书中找到了它,但是我想要更多我可以用。 我在Wikipedia页面上检查了“上帝对象”,并且该页面当前是一个存有很少参考链接的存根,因此尽管我个人同意它说,但在个人经历被认为无效的环境中,我没有太多用处。被引用的书也被认为太老了,无法被我在讨论这些技术要点的人们接受,因为他们提出的论据是:“曾经被认为是不好的,但没人能证明它,而现在的现代软件则说:”上帝“对象很好用”。我个人认为这句话是不正确的,但无论事实如何,我都想证明事实。 在罗伯特·C·马丁(Robert C Martin)的“ C#中的敏捷原理,模式和实践”(ISBN:0-13-185725-8,精装本)的第266页中,它指出:“每个人都知道,神的阶级是个坏主意。我们不想将系统的所有智能集中到单个对象或单个功能中。OOD的目标之一是将行为划分和分布到许多类和许多功能中。” -然后继续说有时还是最好还是使用上帝课程(以引用微控制器为例)。 在罗伯特·C·马丁(Robert C Martin)的“清洁代码:敏捷软件技巧手册”第136页(仅此页面)中,谈到了“上帝的阶级”,并称其为违反“阶级应该很小”规则的主要例证。从第138页开始,他使用了“单一责任原则”。 我遇到的问题是,我所有的参考文献和引用都来自同一个人(Robert C. Martin),并且来自同一个人/来源。有人告诉我,因为他只是一个观点,所以我不使用“上帝类”的愿望是无效的,并且未被接受为软件行业的标准最佳实践。这是真的?从技术的角度来看,我是在努力遵循鲍勃叔叔的教导做错事情吗? 上帝对象和面向对象的编程与设计: 我对这一点的思考越多,我就越会在学习OOP时学到更多,而且从来没有明确指出过。它对良好设计的暗含是我的想法(请随意纠正我,因为我想学习),问题是我“知道”这一点,但不是每个人都知道,因此在这种情况下,它不被视为有效的论证,因为当实际上大多数人在统计上都不了解它时,我实际上将其称为普遍真理,因为从统计学上讲大多数人都不是程序员。 结论: 我不知所措,想获得最好的附加结果来引用,因为他们提出了技术要求,并且我想知道真相并能够像真正的工程师/科学家一样被引用证明事实,即使由于我对使用神物的经验,我对神物有偏见。任何帮助或引用将不胜感激。

6
您可以在没有class关键字的情况下实现“面向对象”编程吗?
假设我们要提供银行“帐户”的抽象。这是function在Python中使用对象的一种方法: def account(): """Return a dispatch dictionary representing a bank account. >>> a = account() >>> a['deposit'](100) 100 >>> a['withdraw'](90) 10 >>> a['withdraw'](90) 'Insufficient funds' >>> a['balance'] 10 """ def withdraw(amount): if amount > dispatch['balance']: return 'Insufficient funds' dispatch['balance'] -= amount return dispatch['balance'] def deposit(amount): dispatch['balance'] += amount return dispatch['balance'] …

1
对象转换的设计模式(java)
除了偶尔的工厂和MVC之外,我不经常使用设计模式,我想更多地使用它们。 我手头有一个具体案例,希望您对在这种情况下使用设计模式有意见。 在我的应用程序中,我不得不经常在不同情况下转换对象。我可能必须将Hibernate POJO转换为DTO,因为我使用GWT,并且Hibernate POJO不能序列化,也不能通过线路发送。 在另一种情况下,我可能需要将Java对象转换为SolrInputDocument的对象,以便由Solr进行索引。 我想知道是否应该为此使用设计模式。看来“对象转换”是一种通用任务,可以通过一种模式以灵活/抽象的方式进行处理,但是我真的不知道如何实现。 如果没有模式,我只会为每种转换类型创建一个单独的类,例如CourseToSolrInputDocument(Course是我的应用程序中的Hibernate实体)。或CourseToCourseDTO。这些转换类中的每一个都可能具有一个称为的静态方法convert(),该方法将源对象作为输入并返回输出对象。 但这不是一个真正的模式,对吗?因此,我从泛型入手,并创建了实现Converter接口的此类。但是以某种方式感到傻傻的创建了一个通用的接口,除了能够祝贺自己使用通用外,我没有真正的优势。 public class CourseToSolrInputDocument implements Converter<Course, SolrInputDocument> { @Override public void convert(Course source, SolrInputDocument destination) { //To change body of implemented methods use File | Settings | File Templates. } } 因此,这里的真正问题是:是否存在适用于通用对象转换的模式?您的方法是什么?与仅使用每个转换类的类型方法相比,优点是什么?


5
为什么我看到这么多没有状态的可实例化类?
我在C ++和Java世界中看到许多没有任何状态的可实例化类。 我真的不知道为什么人们这样做,他们只能在C ++中使用带有自由函数的名称空间,或者在Java中使用具有私有构造函数和仅静态方法的类。 我能想到的唯一好处是,如果您以后决定在某些情况下需要不同的实现,则不必更改大多数代码。但这不是过早设计的情况吗?当/如果合适的话,以后可以将其变成一堂课。 我搞错了吗?如果我不将所有内容都放入对象(即实例化类)中,这不是OOP吗?那么,为什么在C ++和Java的标准库中有如此多的实用程序名称空间和类? 更新: 在以前的工作中,我当然已经看过很多这样的例子,但是我一直在努力寻找开放源代码的例子,因此也许毕竟不是那么普遍。不过,我想知道人们为什么这么做,以及这种做法有多普遍。

3
在Java中串联字符串时,在内存中创建了多少个字符串?
有人问我有关Java中的不可变字符串。我的任务是编写一个将多个“ a”连接到一个字符串的函数。 我写的是: public String foo(int n) { String s = ""; for (int i = 0; i < n; i++) { s = s + "a" } return s; } 然后我被问到这个程序将生成多少个字符串,假设不会发生垃圾回收。我对n = 3的想法是 ” “一种” “一种” “ aa” “一种” “啊!” “一种” 在循环的每次迭代中,基本上都会创建2个字符串。但是,答案是n 2。此函数将在内存中创建哪些字符串,为什么呢?
17 java  strings  object 

4
无法解决Javascript函数之谜
我试图了解Javascript幕后的景象,并迷恋于了解内置对象的创建,尤其是对象和函数以及它们之间的关系。 当我读取到所有内置对象(如Array,String等)都是从Object扩展(继承)时,我假定Object是第一个被创建的内置对象,其余对象都继承自该对象。但是,当您知道对象只能由函数创建时,然后函数也不过是Function的对象而已,这没有任何意义。听起来开始像母鸡和鸡肉的困境。 另一个非常令人困惑的事情是,如果我console.log(Function.prototype)打印了一个函数,但是当我打印时console.log(Object.prototype)它打印了一个对象。为什么Function.prototype当它打算成为一个对象时是一个函数? 同样,根据Mozilla文档,每个javascript function都是Function对象的扩展,但是当您console.log(Function.prototype.constructor)再次将其作为函数时。现在,您如何使用自己创建的东西(思维=吹动)。 最后一件事Function.prototype是一个函数,但是我可以constructor使用来访问该函数Function.prototype.constructor,这意味着Function.prototype一个返回prototype对象的函数

4
Java中的类变量和实例变量之间有什么区别?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 4年前关闭。 我对Java还是很陌生,想了解类变量和实例变量之间的区别。 例如: class Bicycle { static int cadence = 0; int speed = 0; int gear = 1; } 实例变量和类变量之间有何不同?这里的哪些变量是类变量,哪些是实例变量?这如何影响范围?
16 java  class  object  instance 

1
java.util软件包中用于堆栈的对象约束语言(OCL)
我即将参加考试,并且正在查看过去的论文,以期获得一些期望的想法。我对以下内容有些困惑,如果有人可以给出示例答案,我将不胜感激。 在OCL中为以下每个操作(包括在java.util包的Stack类中)写入前置条件和后置条件: (1)布尔型empty()-测试此堆栈是否为空 (2)E peek()-在不从堆栈中移除的情况下,查看此堆栈顶部的对象 (3)E pop()-删除此堆栈顶部的对象,并将该对象作为此操作的值返回 (4)E push(E item)-将一个项目推到此堆栈的顶部 这里E表示堆栈中元素的类型。 我的尝试如下: Boolean empty() pre: none post: self -> IsEmpty() = true //should this be result -> IsEmpty() = true because it returns a boolean value? E peek() pre: self -> NotEmpty() = true post: result = ??? // I …
10 design  languages  object  ocl 

5
配置类/结构:图案还是反图案?备择方案?
如果将新的配置选项添加到程序,则在将选项带到需要对其执行操作的位置时,它通常会产生大量涟漪效应。我知道有三种基本的处理方法: 将所有配置设置传递给程序中明确需要它们作为原语的部分。这是最明确的方式,也是最能使事物解耦的方式。缺点是这既冗长又脆弱。 将最常用的配置设置设为全局/静态。这是最简单的方法,但是会引入一定距离的操作,阻碍了可测试性,并假定该配置确实是全局的(您在任何给定时间只需要一个配置)。 创建一个包含整个程序或程序中每个主要问题的所有配置选项的配置类/结构,然后将其显式传递。它不如(1)明确,但比(2)更明确。如果只想更改一个函数调用的设置,则可以克隆config对象并更改该值。这在测试和实践中都是有用的。但是,您仍然可能最终将大量信息传递给它不需要的功能,并且更改config类/结构中的值仍会导致一定距离的操作。 您会考虑(3)模式还是反模式?如果是反模式,您该怎么办?
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.