我有一个名为Chicken的类,在Chicken中我有一些方法,所以在另一个我实例化并调用Chicken方法的类中,我可能会这样做:
Chicken chicken = new Chicken("Name","Description")
public void UpdateChicken(Chicken chicken)
{
chicken.Update(chicken);
}
Run Code Online (Sandbox Code Playgroud)
以上是罚款还是存在问题,如果是这样,最好还有另一个类,例如ChickenCalculations,并执行以下操作:
public void UpdateChick(Chicken chicken)
{
ChickenCalculations.Update(chicken);
}
Run Code Online (Sandbox Code Playgroud)
这是一个实现:
Chicken chicken = new Chicken("Bob","Coolest Chicken", 4, 123, 5, 388, true, false, true);
Chicken anotherChicken = new Chicken()
anotherChicken.Update(chicken);
chicken.Update(chicken)
Run Code Online (Sandbox Code Playgroud)
这是一个更实际的例子,而不是使用鸡:
public class AirlineBooking
{
int BookingId {get;set;}
string Name {get;set;}
string Description {get;set;}
decimal Price {get;set;}
decimal Tax {get;set;}
string seat {get;set;}
bool IsActive {get;set;}
bool IsCanceld {get;set;}
public AirlineBooking(string name, string description, decimal price,
decimal tax, …
Run Code Online (Sandbox Code Playgroud) 有时需要禁止C++类中的复制构造函数,以使类变为"不可复制".当然,operator=
应该同时禁止.
到目前为止,我已经看到了两种方法.方法1是将方法声明为private并且不给它实现:
class Class {
//useful stuff, then
private:
Class( const Class& ); //not implemented anywhere
void operator=( const Class& ); //not implemented anywhere
};
Run Code Online (Sandbox Code Playgroud)
方法2是将方法声明为private并将其赋予"空"实现:
class Class {
//useful stuff, then
private:
Class( const Class& ) {}
void operator=( const Class& ) {}
};
Run Code Online (Sandbox Code Playgroud)
IMO第一个更好 - 即使有一些意外的原因导致从同一个类成员函数调用复制构造函数,稍后会出现链接器错误.在第二种情况下,在运行时之前不会注意到这种情况.
第一种方法有任何严重的缺点吗?什么是更好的方式,如果有的,为什么?
有一个Checkstyle规则DesignForExtension.它说:如果你有一个公共/受保护的方法,它不是抽象的,也不是最终的也不是空的,它不是"为扩展而设计的".请在Checkstyle页面上阅读此规则的说明以获取基本原理.
想象一下这个案子.我有一个抽象类,它定义了一些字段和这些字段的验证方法:
public abstract class Plant {
private String roots;
private String trunk;
// setters go here
protected void validate() {
if (roots == null) throw new IllegalArgumentException("No roots!");
if (trunk == null) throw new IllegalArgumentException("No trunk!");
}
public abstract void grow();
}
Run Code Online (Sandbox Code Playgroud)
我还有一个植物的子类:
public class Tree extends Plant {
private List<String> leaves;
// setters go here
@Overrides
protected void validate() {
super.validate();
if (leaves == null) throw new IllegalArgumentException("No …
Run Code Online (Sandbox Code Playgroud) 什么时候我应该做一个功能private
,为什么这是个好主意?
为什么Objective C中的常见集合类(如NSString,NSArray,NSDictionary等)具有可变版本和不可变版本.分别定义它们的逻辑是什么?性能,内存管理还是其他什么?
我的应用程序使用两个数据库(单独的文件)为了处理这些数据库,我创建了两个扩展SQLiteOpenHelper的Helper类,每个数据库一个.
我现在要添加第三个数据库并想知道是否需要创建另一个Helper类(如果我使用了第4个和第5个数据库,我还需要更多Helper类),或者我可以使用相同的Helper类进行多个数据库?
我在尝试使用一个Helper类时遇到的问题是我无法看到如何将各个数据库文件的名称传递给Helper.目前,数据库的名称被硬编码为每个Helper类的静态字段,但是如果我只有一个Helper类,我需要能够在创建单独的Helper时将不同的名称传递给构造函数对象; 问题是SQLiteOpenHelper构造函数似乎只是由Android调用,只有一个参数:Context.
我想在类中编写一些方法,以便其他类可以使用调用这些方法[instance methodName:Parameter]
.
如果类是其子类UIViewController
,我可以用initWithNibName
它来初始化它.但我想在NSObject的子类中编写方法,我该如何初始化它?
在我看来,非公共顶级类和静态嵌套类在创建辅助类时基本上执行相同的任务.
public class A
{
public static main (String[] args)
{
AHelper helper = new AHelper();
}
}
class AHelper {}
Run Code Online (Sandbox Code Playgroud)
public class A
{
public static main (String[] args)
{
A.AHelper helper = new A.AHelper();
}
static class AHelper {}
}
Run Code Online (Sandbox Code Playgroud)
除了它们的引用方式之外,我认为创建辅助类的两种方式之间差别不大.它可能主要归结为偏好; 有没有人看到我错过的任何东西?我想有些人会认为每个源文件有一个类更好,但从我的角度来看,在同一个源文件中有一个非公共顶级类似乎更干净,更有条理.
下图是我第一次尝试创建描述用户登录网站的UML类图.
我确信它的设计很差,并且有很多缺陷,但我希望向你们学习如何设计一个像这样的简单登录.我对您使用设计模式以及您将使用哪些模式,如何在设计中实现它以及原因感兴趣.
任何建议,批评,意见和建议将非常感激.提前致谢.
我有这些课程和程序:
TParent = class(TObject);
TChild1 = class(TParent);
TChild2 = class(TParent);
Procedure DoSomething(obj:TParent);
Run Code Online (Sandbox Code Playgroud)
我想做的是什么时候obj
,TParent
而不是后代提出异常.
我想过做这样的事情:
if obj.classname = TParent.classname then raise exception.create....
Run Code Online (Sandbox Code Playgroud)
但似乎有点hackish(TM)
更多:我的意图是能够传递共享属性/过程的对象.经过深思熟虑后,根本不需要TParent Object,我需要的是我的答案中显示的接口对象.
class-design ×10
oop ×3
c++ ×2
iphone ×2
java ×2
.net ×1
android ×1
c# ×1
constructor ×1
database ×1
delphi ×1
foundation ×1
inheritance ×1
ios ×1
objective-c ×1
sqlite ×1
subclass ×1
uml ×1