标签: object-oriented-analysis

资源学习解决系统设计面试问题

系统设计问题是科技公司在访谈中倾向于询问的一类问题,以及更常见的基于algorythmic和知识的问题.该术语涵盖了抽象的面向对象设计

勾勒出垄断游戏的类图

还有更多关于以性能为导向的问题

您如何为大型Facebook游戏设计事件记录系统?

现在越来越多的这些问题涉及并发和分布式计算的主题.这些类型问题的问题是 - 很难找到好的资源.与algorthmic问题不同,没有在线评委会立即告诉您是否做得对.在像careercup这样的网站上发布的问题没有回答或不可靠.涉及系统设计的书籍范围太宽,无法用于面试准备.那么:你如何准备系统设计问题,而不是设计系统几年?有在线教程吗?问题 - 答案(解释) - 类型指南?

system-design object-oriented-analysis

36
推荐指数
1
解决办法
3万
查看次数

MVC模式中的"Hello World"

在一些公司的采访中,我被问到这个问题.

您知道哪些设计模式......然后我被告知要编写基于MVC设计模式的最简单的"hello world"应用程序.

我想出了一个JavaScript程序

var arr = ["a","b","c","d"];   // this is an array, same as store or model
alert(arr[0]);                // this is controller
//and browser alert is a view.
Run Code Online (Sandbox Code Playgroud)

后来我被告知警报是一种观点.关于MVC的基本概念,我知道模型中的任何更改都会报告给View.并且中间有一个控制器来调用方法.

你能否纠正我的方法,或者为hello world MVC应用程序提出替代解决方案.还解释了MVC的细微方面.

谢谢.

javascript model-view-controller design-patterns object-oriented-analysis

31
推荐指数
3
解决办法
3万
查看次数

这种"instanceof"运算符的使用是否被认为是错误的设计?

在我的一个项目中,我有两个"数据传输对象"RecordType1和RecordType2,它们继承自RecordType的抽象类.

我希望两个RecordType对象在"process"方法中由同一个RecordProcessor类处理.我的第一个想法是创建一个通用的流程方法,该方法委托给两个特定的流程方法,如下所示:

public RecordType process(RecordType record){

    if (record instanceof RecordType1)
        return process((RecordType1) record);
    else if (record instanceof RecordType2)
        return process((RecordType2) record);

    throw new IllegalArgumentException(record);
}

public RecordType1 process(RecordType1 record){
    // Specific processing for Record Type 1
}

public RecordType2 process(RecordType2 record){
    // Specific processing for Record Type 2
}
Run Code Online (Sandbox Code Playgroud)

我读过Scott Meyers在Effective C++中写了以下内容:

"任何时候你发现你自己编写的形式的代码'如果对象是T1类型,那么做一些事情,但如果它是T2类型,那么做一些其他的事情,'打自己."

如果他是对的,显然我应该打自己.我真的没有看到这是多么糟糕的设计(除非当然有人将RecordType子类化并添加到RecordType3而不向处理它的通用"Process"方法添加另一行,从而创建一个NPE),以及我能想到的替代方案涉及将特定处理逻辑首当其冲地放在RecordType类本身中,这对我来说真的没有多大意义,因为理论上我可以对这些记录执行许多不同类型的处理.

有人可以解释为什么这可能被视为糟糕的设计并提供某种替代方案,仍然负责将这些记录处理到"处理"类?

更新:

  • 改变return nullthrow new IllegalArgumentException(record);
  • 简单来说,简单的RecordType.process()方法有三个原因是不够的:首先,处理实际上远离RecordType,在RecordType子类中应该拥有自己的方法.此外,理论上可以由不同的处理器执行大量不同类型的处理.最后,RecordType被设计为一个简单的DTO类,其中定义了最小的状态改变方法.

java design-patterns instanceof object-oriented-analysis

28
推荐指数
1
解决办法
7856
查看次数

宣告孩子输入基类; 是不是坏了?

最近我遇到了一些代码,它们将子类型声明为基类中的枚举.这是一个简单的例子:

public enum EmployeeType
{
    Manager,
    Secretary
}

public class Employee
{
    public string Code { get; set; }

    public EmployeeType Type { get; set; }
}

public class Manager : Employee
{
    public void Manage()
    {
        // Managing
    }
}

public class Secretary : Employee
{
    public void SetMeeting()
    {
        // Setting meeting
    }
}
Run Code Online (Sandbox Code Playgroud)

根据我的开发经验,我写了一篇关于它的文章,宣称这是一个糟糕的做法/设计.我认为这很糟糕,因为基类应该与其子类无关.它应该没有关于其子类的信息,这至少有两个原因:

  1. 可扩展性:此设计不可扩展,因为如果要定义另一个派生类,Developer例如,您还应该更新EmployeeType您可能无权访问的枚举.
  2. 矛盾的定义:现在你可以编写这段代码:

    Secretary secretary = new Secretary();
    secretary.EmployeeType = EmployeeType.Manager;
    /*
    This is absurd semantically. …
    Run Code Online (Sandbox Code Playgroud)

c# oop object-oriented-analysis

18
推荐指数
3
解决办法
1286
查看次数

oop中具有状态和行为的对象

我一直听到对象这个术语有行为和状态,或只是其中之一.但是有什么区别或者它意味着什么,如果有人能举一个例子,我会非常感激.

oop object-oriented-analysis

17
推荐指数
3
解决办法
3万
查看次数

Java - 2种方式'有'A'关系

我刚刚开始了一个项目,让我的雇主成为管理软件.我有一个琐碎,但可能很简单的查询,我似乎无法找到任何信息.

在对象之间建立双向"关系"是谨慎/良好的做法.那么,例如,一个Client对象'有一个' Site,然后Site'有一个' Client,其中Client对象是Client'有'的Site

public class Client {
    Site site;
}

public class Site {
    Client client;
}
Run Code Online (Sandbox Code Playgroud)

这有什么令人反感的(没有双关语意),还是没事?我目前正在为该项目创建一个模拟UML,这一直困扰着我.

java oop object object-oriented-analysis

17
推荐指数
1
解决办法
4382
查看次数

首先设计模式与首先面向对象的分析和设计

目前我正在通过Head First Java学习Java,并开始展望更多有关OOP /设计模式的内容.

我的问题是在Head First Java之后应该追求哪本书.我在Head First Design Patterns和Head First Object Oriented Analysis and Design之间徘徊不前.毫无疑问,我可能应该阅读这两个,但我不确定两者之间的区别是什么,哪个更适合作为Head First Java的后续版本.

任何阅读这些建议或细节的人都将不胜感激.

java design-patterns object-oriented-analysis

16
推荐指数
1
解决办法
8813
查看次数

Scala把方法放在特质或案例类?

有两种方法可以为scala中继承相同特征的两个不同类定义方法.

sealed trait Z { def minus: String }
case class A() extends Z { def minus = "a" }
case class B() extends Z { def minus = "b" }
Run Code Online (Sandbox Code Playgroud)

替代方案如下:

sealed trait Z { def minus: String = this match {
    case A() => "a"
    case B() => "b"
}
case class A() extends Z
case class B() extends Z
Run Code Online (Sandbox Code Playgroud)

第一种方法重复方法名称,而第二种方法重复类名称.我认为第一种方法最好使用,因为代码是分开的.但是,我发现自己经常使用第二个方法来处理复杂的方法,因此可以非常容易地添加其他参数,例如:

sealed trait Z {
  def minus(word: Boolean = false): String = this match {
    case A() => …
Run Code Online (Sandbox Code Playgroud)

scala object-oriented-analysis

15
推荐指数
2
解决办法
1万
查看次数

使用Java中的Inner类拆分大类

我正在开发一个Android项目.我已经搜索过高低,但我无法找到一个好的策略来拆分和打包我的代码.

我的问题是我有内部类使用主类变量,我无法弄清楚如何解耦它们.

我试图创建辅助类,但是我要么通过构造函数传递很多变量,要么暴露我的主类,我也不想这样做.

我想将每个类的最大代码行保持为150.目前,它是278.我正在寻找解耦这些的想法,特别是如何重构类以保留抽象(private变量).这方面的Java最佳做法是什么?

举个例子,是我的主要课程之一MainActivity,约30​​0行.

java android packaging inner-classes object-oriented-analysis

14
推荐指数
1
解决办法
1293
查看次数

软件设计网站

哪些网站(不是书籍)文档设计(UML或其他)用于软件应用程序?

建筑师有许多可用于灵感和建筑的资源.我不寻求构建软件的资源(例如Meyer的面向对象软件构造),而是软件组件或类图的设计示例,可用作开发应用程序的起点.

示例应用可能包括:

设计模式的书是一个良好的开端,但有点太低级.

oop design-patterns object-oriented-analysis

13
推荐指数
1
解决办法
795
查看次数