Questions tagged «class»

声明对象类型的模板。

4
“使用地图代替类来表示数据” -Rich Hickey
在Clojure创作者Rich Hickey的这段视频中,他建议使用map来表示数据,而不是像Java那样使用类来表示数据。我不明白该怎么做,因为如果API用户将其简单地表示为地图,他们怎么会知道输入键是什么。 范例: PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } 在第二个函数中,API用户如何知道创建人的输入是什么?
19 java  design  class  clojure  map 

1
为什么在python中编写Tkinter GUI时使用类
我主要使用python进行编程,并使用Tkinter编写了几个GUI,我见过的每个教程都建议为该GUI定义和使用一个类,但是我的GUI可以仅使用过程而完美运行,而无需使用类。 为什么要上课?在我看来,这似乎只是复杂性和不必要代码的额外一层。
19 python  gui  class 

2
Python中的类与模块
Python有许多re执行一组特定操作的模块(例如)。您可以调用此模块的函数并获取结果,并且该模块作为一个整体有一个主意(在这种情况下,处理正则表达式)。 类似乎做几乎完全相同的事情,但是它们似乎比模块更多地使用属性。 模块与类在哪些方面有所不同?(我知道我不能对模块进行子类化,是吗?)什么时候应该使用类而不是模块?
19 class  modules 

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

4
如何最好地组织类和接口文件?
好的..经过所有讨论之后,我将稍微更改我的问题以更好地反映我正在处理的具体示例。 我有两个类,ModelOne和ModelTwo,这些类执行类似的功能,但彼此无关。但是,我有一个第三类CommonFunc,其中包含一些公共功能,这两种功能都在两者中实现ModelOne,ModelTwo并且已根据进行了分解DRY。这两个模型是在ModelMain类中实例化的(它本身是在更高级别上实例化的,但是我将在这个级别上停止)。 我正在使用的IoC容器是Microsoft Unity。我不假装自己是专家,但是我的理解是,您在容器中注册了一个接口和类的元组,当您想要一个具体的类时,您会向IoC容器询问与特定接口匹配的任何对象。这意味着对于我要从Unity实例化的每个对象,都必须有一个匹配的接口。因为我的每个类都执行不同的功能(且不重叠),所以这意味着接口和类1之间的比例为1:1。但是,这并不意味着我正在为每个编写的类都刻苦地编写一个接口。 因此,在代码方面,我最终得到2: public interface ICommonFunc { } public interface IModelOne { ICommonFunc Common { get; } .. } public interface IModelTwo { ICommonFunc Common { get; } .. } public interface IModelMain { IModelOne One { get; } IModelTwo Two { get; } .. } public class …

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

6
使用朋友类在C ++中进行单元测试私有方法
我知道这是一个有争议的做法,但是让我们假设这对我来说是最佳选择。我想知道执行此操作的实际技术是什么。我看到的方法是这样的: 1)与我要测试的方法的班级做一个朋友班。 2)在friend类中,创建一个公共方法,该公共方法调用被测试类的私有方法。 3)测试好友类的公共方法。 这是一个简单的示例来说明上述步骤: #include <iostream> class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step 2 { return mc_ptr->plus_two(a); } private: …

7
单例,抽象类和接口的作用是什么?
我正在学习C ++中的OOP,即使我知道这3个概念的定义,我也无法真正意识到何时或如何使用它。 让我们以此类为例: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int parameter){this->age=parameter;} string get_name (){return this->name;} int get_age (){return this->age;} }; 1. 单身人士 类的限制如何只有一个对象起作用? CAN你设计一个类,将有只有 2个实例?也许3? 何时 /建议何时使用单例?这是好习惯吗? 2. 抽象类 据我所知,如果只有一个纯虚函数,则该类将变为抽象。因此,添加 virtual void print ()=0; 会做到的,对吧? 为什么需要一个不需要其对象的类? …

5
继承与具有空值的其他属性
对于具有可选字段的类,使用继承或可为空的属性更好吗?考虑以下示例: class Book { private String name; } class BookWithColor extends Book { private String color; } 要么 class Book { private String name; private String color; //when this is null then it is "Book" otherwise "BookWithColor" } 要么 class Book { private String name; private Optional<String> color; //when isPresent() …
12 java  inheritance  class  null 

5
有什么好的设计习惯可以避免询问子类类型?
我已经读到,当您的程序需要知道对象是什么类时,通常表明存在设计缺陷,因此我想知道什么是处理此问题的好方法。我正在实现一个Shape类,该类具有从其继承的不同子类,例如Circle,Polygon或Rectangle,并且我有不同的算法来确定Circle是否与Polygon或Rectangle碰撞。然后假设我们有两个Shape实例,并且想知道一个是否与另一个碰撞,在这种方法中,我必须推断正在碰撞的对象是哪种子类类型,以便知道应该调用哪种算法,但这是一个设计或实践不当?这就是我解决的方法。 abstract class Shape { ShapeType getType(); bool collide(Shape other); } class Circle : Shape { getType() { return Type.Circle; } bool collide(Shape other) { if(other.getType() == Type.Rect) { collideCircleRect(this, (Rect) other); } else if(other.getType() == Type.Polygon) { collideCirclePolygon(this, (Polygon) other); } } } 这是一种不良的设计模式吗?如何解决这个问题而不必推断子类类型?

3
应该如何设计“员工”类?
我正在尝试创建一个用于管理员工的程序。但是,我无法弄清楚如何设计Employee课程。我的目标是能够使用Employee对象在数据库上创建和操作员工数据。 我想到的基本实现就是这样一个简单的实现: class Employee { // Employee data (let's say, dozens of properties). Employee() {} Create() {} Update() {} Delete() {} } 使用此实现,我遇到了几个问题。 该ID雇员是由数据库给出的,所以如果我使用描述的新雇员的对象,不会有ID存储然而,当代表现有员工的对象将有一个ID。因此,我有一个属性,它有时描述对象,有时却不描述(这可能表明我们违反了SRP?因为我们使用同一类来表示新员工和现有员工...)。 该Create方法应该在数据库上创建一个雇员,而Update和Delete应该作用于现有雇员(再次,SRP ...)。 “创建”方法应具有哪些参数?所有员工数据或Employee对象的数十个参数? 班级应该是一成不变的吗? 会如何Update工作?是否需要属性并更新数据库?还是需要两个对象-一个“旧”对象和一个“新”对象,并使用它们之间的差异更新数据库?(我认为答案与该类的可变性有关)。 建设者的责任是什么?它需要什么参数?它会使用id参数从数据库中获取员工数据并填充属性吗? 因此,如您所见,我的头有些乱,我非常困惑。您能否帮助我了解此类课程的外观? 请注意,我只是为了了解通常如何设计这种经常使用的类而不想发表意见。

4
嵌套类:有用的工具还是违反封装的?
因此,对于是否应使用这些功能,我仍然持保留态度。 我感到它极度违反了封装,但是我发现我可以在某种程度上实现封装,同时在代码中获得更大的灵活性。 以前的Java / Swing项目在某种程度上使用了嵌套类,但是现在我进入了C#中的其他项目,因此避免使用它们。 您如何看待嵌套类?

5
如何解决我的C ++代码中的类相互依赖性?
在我的C ++项目中,我有两个类,Particle和Contact。在Particle该类中,我有一个成员变量std::vector<Contact> contacts,其中包含Particle对象的所有触点以及相应的成员函数getContacts()和addContact(Contact cont)。因此,在“ Particle.h”中,我包括“ Contact.h”。 在Contact该类中,我想将代码添加到构造函数中Contact,以调用Particle::addContact(Contact cont),以便contacts针对Particle在其间Contact添加对象的两个对象进行更新。因此,我必须在“ Contact.cpp”中包含“ Particle.h”。 我的问题是这是否可接受/良好的编码习惯,如果不能,那么哪种更好的方式来实现我要实现的目标(简单地说,每当有新联系人时,自动更新特定粒子的联系人列表)被建造)。 这些类别将由Network具有N个粒子(std::vector<Particle> particles)和Nc个接触(std::vector<Contact> contacts)的类别联系在一起。但是我希望能够拥有类似的功能particles[0].getContacts()– Particle在这种情况下可以在类中使用这样的功能,还是为此目的在C ++中有更好的关联“结构”(在另一个类中使用两个相关类) 。 在此方面,我可能需要转变看法。由于这两个类是由一个Network类对象连接的,因此典型的代码/类组织是具有完全由该Network对象控制的连接信息(因为Particle对象不应知道其联系,因此,它不应具有getContacts()成员)功能)。然后,为了知道特定粒子具有什么接触,我将需要通过Network对象(例如使用network.getContacts(Particle particle))获得该信息。 具有粒子粒子知识的C ++类设计是否也不太典型(也许甚至不鼓励),也就是(具有通过网络对象或粒子粒子访问信息的多种方式),无论哪种方式看起来更方便)?

3
在类构造函数中注入数据(相对于行为)意味着什么,为什么这被认为是不好的做法?
我正在阅读Remo Jansen的书“ Learning TypeScript”。在一个部分中,作者描述了如何创建一个非常简单的概念验证MVC框架,包括如何创建Model类,并说了以下几点: 需要向模型提供其使用的Web服务的URL。我们将使用一个名为ModelSettings的类装饰器来设置要使用的服务的URL。我们可以通过其构造函数注入服务URL,但通过类构造函数注入数据(与行为相反)被认为是一种不好的做法。 我不明白那句话。特别是,我不明白“注入数据”的含义。在我看来,在几乎所有使用过度简化示例的JavaScript类介绍中,数据都是通过其参数引入(“注入”?)到构造函数中的。例如: class Person { constructor(name) { this.name = name; } } 我当然想到 name是数据,而不是行为,并且在此类示例中普遍将其作为构造函数参数包含在内,并且从未有人提到这是不好的做法。因此,我认为我误解了上面引用中的某些内容,无论是“数据”还是“注入”或其他含义。 您的答案可能包括在JavaScript / TypeScript中何时,何地,如何以及为什么使用装饰器的解释,因为我强烈怀疑该概念与我寻求的理解密切相关。但是,更重要的是,我想更广泛地理解通过类构造函数注入数据的含义以及为什么这样做很糟糕。 为了使上面的引用有更多的上下文,这是这种情况:Model创建了一个类,在本示例中,该类将用于创建股票交易模型,一个用于NASDAQ,一个用于NYSE。每个模型都需要提供原始数据的Web服务或静态数据文件的路径。该书指出,应该使用装饰器(而非构造器参数)获取此信息,从而导致以下结果: @ModelSettings("./data/nasdaq.json") class NasdaqModel extends Model implements IModel { constructor(metiator : IMediator) { super(metiator); } ... } 我只是一直不明白为什么我应该通过装饰器而不是简单地作为构造函数的参数来添加服务网址,例如 constructor(metiator : IMediator, serviceUrl : string) {...


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.