Questions tagged «class»

声明对象类型的模板。

5
什么时候使用结构而不是类?[关闭]
您何时使用结构与类的经验法则是什么?我正在考虑这些术语的C#定义,但是如果您的语言具有类似的概念,我也想听听您的意见。 我倾向于对几乎所有东西使用类,并且仅在某些东西非常简单并且应该是值类型(例如PhoneNumber或类似的东西)时才使用structs。但这似乎是一个相对较小的用途,我希望有更多有趣的用例。
174 c#  design  class  struct 

10
不要在C#中使用“静态”?
我提交了我写给其他一些架构师的应用程序,以供代码审查。其中一个几乎立即写信给我,说:“不要使用“静态”。您不能使用静态类和方法编写自动测试。要避免使用“静态”。 我检查了一下,并将全部1/4的班级标记为“静态”。当我不打算创建类的实例时,我会使用static,因为该类是整个代码中使用的单个全局类。 他继续提到了涉及模拟,IOC / DI技术的一些静态代码无法使用的技术。他说,由于第三方库不可测试,当第三方库为静态库时很不幸。 这个建筑师是正确的吗? 更新:这是一个示例: APIManager-此类保留我正在调用的第三方API的字典以及下一个允许的时间。它强制执行许多第三方在其服务条款中规定的API使用限制。我可以通过调用Thread.Sleep(APIManager.GetWait(“ ProviderXYZ”))在调用第三方服务的任何地方使用它;在拨打电话之前。这里的所有内容都是线程安全的,并且与C#中的TPL一起使用时效果很好。

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

7
为什么要使用私有静态方法?
我只是想解决一个问题。与具有私有可见性的普通方法相比,拥有私有静态方法有什么意义? 我本来以为拥有静态方法的一个优点是可以在没有类实例的情况下调用它,但是由于它的私有性,甚至有一点是静态的吗? 我能想到的唯一原因是,它有助于从概念上理解类级别(而不是对象级别)上的方法。

11
将程序分成多个类为什么很好?[关闭]
我仍然是一名高中学生(正在读10年级),并且还没有在学校学习实际的计算机课程。到目前为止,我所做的一切都是通过书本。这些书教会了我诸如继承的概念,但是将程序分成多个类又有什么帮助呢?这些书从未告诉过我。 我问这个问题主要是因为最近有一个项目。这是一款街机视频游戏,就像有人所说的Flash游戏一样(尽管我不知道Flash游戏是什么)。事实是,这只是一堂课。仅使用一个类,它就可以很好地工作(但是偶尔会有一些滞后)。所以,我只是问如何将其拆分为多个类会有所帮助。 这个项目是用Java编写的,我是唯一从事该项目的人。

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时学到更多,而且从来没有明确指出过。它对良好设计的暗含是我的想法(请随意纠正我,因为我想学习),问题是我“知道”这一点,但不是每个人都知道,因此在这种情况下,它不被视为有效的论证,因为当实际上大多数人在统计上都不了解它时,我实际上将其称为普遍真理,因为从统计学上讲大多数人都不是程序员。 结论: 我不知所措,想获得最好的附加结果来引用,因为他们提出了技术要求,并且我想知道真相并能够像真正的工程师/科学家一样被引用证明事实,即使由于我对使用神物的经验,我对神物有偏见。任何帮助或引用将不胜感激。

5
什么时候在Java中使用原始vs类?
我看到Java具有Boolean(类)vs boolean(原始)。同样,有一个Integer(类)vs int(原始)。何时使用原始版本与类的最佳实践是什么?除非我有特定的理由(性能?),否则我是否应该基本上一直使用类版本?什么是最常见的,公认的使用方式?
54 java  class  usage 

5
我应该在哪里放置与类无关的函数?
我正在一个C ++项目中工作,其中有很多数学函数,这些函数最初是作为类的一部分编写的。但是,由于我一直在编写更多代码,所以我意识到我到处都需要这些数学函数。 放置它们的最佳位置在哪里?假设我有这个: class A{ public: int math_function1(int); ... } 当我写另一个类时,我不能(或者说我不知道​​如何)math_function1在那个其他类中使用它。另外,我已经意识到其中一些功能与A类并没有真正的联系。它们似乎只是开始,但现在我可以看到它们仅仅是数学功能。 在这种情况下有什么好的做法?现在,我一直在将它们复制粘贴到新类中,我敢肯定这是最糟糕的做法。
47 c++  functions  class 

4
为什么以及何时使课程“静态”?类上的“静态”关键字的目的是什么?
用static多种语言在成员上使用关键字表示您不应创建该类的实例才能访问该成员。但是,我认为没有理由进行整个课堂学习static。我为什么以及何时上课static? 上课能给我带来什么好处static?我的意思是,在声明静态类之后,仍然应该将他/她希望不带实例化即可访问的所有成员也声明为静态。 例如,这意味着Math可以将类声明为普通(非静态),而不会影响开发人员的编码方式。换句话说,将类设为静态或普通对开发人员而言是透明的。

4
为什么更喜欢非静态内部类而不是静态内部类?
这个问题是关于将Java中的嵌套类做成静态嵌套类还是内部嵌套类。我在这里和Stack Overflow上进行了搜索,但是实际上找不到关于此决定的设计含义的任何问题。 我发现的问题是关于静态和内部嵌套类之间的区别的,这对我来说很明显。但是,我还没有找到令人信服的理由在Java中使用静态嵌套类-匿名类除外,我不考虑这个问题。 这是我对使用静态嵌套类的影响的理解: 更少的耦合:由于类不能直接访问其外部类的属性,因此通常得到的耦合较少。较少的耦合通常意味着更好的代码质量,更容易的测试,重构等。 Single Class:类加载器不需要每次都照顾一个新类,我们创建外部类的对象。我们只是一遍又一遍地获得同一类的新对象。 对于一个内部类,我通常会发现人们认为访问外部类的属性是有利的。从设计的角度来看,我希望在这方面有所不同,因为这种直接访问意味着我们具有很高的耦合度,并且如果我们想将嵌套类提取到其单独的顶层类中,则只能在本质上转向将其转换为静态嵌套类。 所以我的问题归结为:我是否认为非静态内部类可用的属性访问会导致较高的耦合度,从而导致较低的代码质量,我是错误的,并且据此我推断(非匿名)嵌套类应一般是静态的? 或者换句话说:为什么有一个令人信服的理由为什么人们更喜欢嵌套的内部类?

4
如何在我的代码中避免“经理”
该问题是从Code Review Stack Exchange 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 6年前。 我目前正在为C ++ 重新设计我的实体系统,并且我有很多经理。在我的设计中,我有这些类,以便将我的库联系在一起。关于“经理”类,我听说过很多坏事,也许我没有适当地命名我的类。但是,我不知道还有什么名字。 在我的图书馆中,大多数经理都是由以下类组成的(尽管确实有所不同): 容器-管理器中对象的容器 属性-管理器中对象的属性 在我的图书馆新设计中,我有这些特定的类,以便将我的图书馆联系在一起。 ComponentManager-管理实体系统中的组件 组件容器 ComponentAttributes 场景*-对场景的引用(请参见下文) SystemManager-管理实体系统中的系统 系统容器 场景*-对场景的引用(请参见下文) EntityManager-管理实体系统中的实体 EntityPool-实体池 EntityAttributes-实体的属性(只能由ComponentContainer和System类访问) 场景*-对场景的引用(请参见下文) 场景-将所有经理联系在一起 组件管理器 系统管理员 实体管理器 我当时只是想将所有容器/池放入Scene类本身。 即 代替这个: Scene scene; // create a Scene // NOTE: // I technically could wrap this line …

1
建议创建常数类的最佳实践
此问题已从Code Review Stack Exchange 迁移,因为可以在Software Engineering Stack Exchange上回答。 迁移 5年前。 我的团队成员之间有一个关于常量类声明的辩论。我们将常量变量移到一个单独的类中,如下所示。 public class Constants { public const string StateId = "ST"; public const string CountryId = "CI"; } 我的一些团队成员建议我们将类声明为密封的,以避免覆盖选项,还有一些建议我们将其标记为静态,以避免创建Constant类的实例。 但是,我更喜欢使用静态构造函数将其作为Sealed,因为它将帮助我们在将来需要时初始化只读变量。请给我们一些建议。
25 c#  class 


5
纯功能语言如何处理模块化?
我来自于面向对象的背景知识,在该背景知识中我了解到,类已经或至少可以用于构成一层抽象,以便于代码的轻松回收,然后可以将其用于创建对象或用于继承。 例如,我可以拥有一个动物类别,然后从中继承猫和狗,使它们都继承许多相同的特征,然后从那些子类别中,我可以创建可以指定动物品种甚至名称的对象它的。 或者,我可以使用类来指定同一代码的多个实例,这些实例处理或包含略有不同的事物。例如搜索树中的节点或多个不同的数据库连接,而没有。 我最近进入函数式编程领域,因此我开始怀疑: 纯函数式语言如何处理此类问题?也就是说,语言没有任何类和对象的概念。


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.