小编dan*_*vic的帖子

依赖与构成之间的区别?

定义取自这里

依赖

类的结构或行为的变化会影响其他相关的类,然后这两个类之间存在依赖关系.它不一定相同,反之亦然.当一个类包含另一个类时,就会发生这种情况.

组成

组合是聚合的特例.以更具体的方式,受限制的聚合称为组合.当一个对象 包含另一个对象时,如果所包含的对象不存在而不存在容器对象,那么它就称为组合.

Java中的具体示例来自此处此处

依赖

class Employee {
    private Address address;

    // constructor 
    public Employee( Address newAddress ) {
        this.address = newAddress;
    }

    public Address getAddress() {
    return this.address;
    }
    public void setAddress( Address newAddress ) {
        this.address = newAddress;
    }
}
Run Code Online (Sandbox Code Playgroud)

组成

final class Car {

  private final Engine engine;

  Car(EngineSpecs specs) {
    engine = new Engine(specs);
  }

  void move() {
    engine.work();
  }
}
Run Code Online (Sandbox Code Playgroud)

java oop dependencies uml composition

12
推荐指数
2
解决办法
7534
查看次数

Python:创建后冻结dict键

是否有可能在创建后"冻结"python dict,以便无法为其添加新密钥?只能更改现有的键值.

如果没有,您如何知道何时更改现有的键值对,以及何时添加新的键值对?

python dictionary immutability keyvaluepair

9
推荐指数
1
解决办法
1931
查看次数

为什么Python提供锁定机制,如果它受GIL的约束?

我知道Python线程一次只能执行一个字节码,那么为什么线程库会提供锁?我假设如果一次只执行一个线程,则不会发生竞争条件.

该库提供锁,条件和信号量.这是同步执行的唯一目的吗?

更新:

我做了一个小实验:

from threading import Thread
from multiprocessing import Process

num = 0

def f():
    global num
    num += 1

def thread(func):
    # return Process(target=func)
    return Thread(target=func)


if __name__ == '__main__':
    t_list = []
    for i in xrange(1, 100000):
        t = thread(f)
        t.start()
        t_list.append(t)

    for t in t_list:
        t.join()

    print num
Run Code Online (Sandbox Code Playgroud)

基本上我应该启动100k线程并递增1.返回的结果是99993.

a)如果有GIL同步和避免竞争条件,结果如何不是99999?b)甚至可以启动100k OS线程吗?

看到答案后更新2:

如果GIL没有真正提供一种方法来执行简单的操作,例如原子递增,那么将它放在那里的目的是什么?它对于讨厌的并发问题没有帮助,那么它为什么要到位呢?我听说过C扩展的用例,有人会举例说明吗?

python multithreading gil locks python-multiprocessing

7
推荐指数
1
解决办法
734
查看次数

OTP行为:gen_fsm; gen_event.实际例子?

我使用了supervisor和gen_server行为,我可以理解它们的实际用途.但是,我并不真正理解gen_fsm和gen_event行为的使用.有人可以通过实例来澄清吗?

提前致谢

erlang behavior erlang-otp

5
推荐指数
1
解决办法
1515
查看次数

SQL:过滤具有最大值的行

这是我的表结构:

File    |   Version     |   Function
1       |   1           |   1
1       |   2           |   1
1       |   3           |   1
1       |   2           |   2

2       |   1           |   4
3       |   2           |   5
Run Code Online (Sandbox Code Playgroud)

我需要它只返回这些行

1       |   3           |   1
2       |   1           |   4
3       |   2           |   5
Run Code Online (Sandbox Code Playgroud)

含义我只想要每个文件具有最新版本的函数.

我不希望下面的结果,即不是最新版本的唯一函数ID

1       |   3           |   1
1       |   2           |   2
...
Run Code Online (Sandbox Code Playgroud)

我看过如何用SQL中的另一列选择MAX(列值),DISTINCT的行?,但它返回最新的唯一函数ID.

查询需要与sqlite3兼容.

sql sqlite greatest-n-per-group

5
推荐指数
1
解决办法
3413
查看次数

Python sqlite3:运行不同的sqlite3版本

我正在使用 sqlite 作为数据库之一运行 Django 项目。我想在运行项目时运行最新的 SQLite 版本。我的意思是最新的 sqlite 二进制文件,而不是 sqlite python 库。

我有一个不是系统默认值的本地 sqlite3 二进制文件,我无法更改默认的 sqlite3 版本。

我没有使用 Django 的 ORM,而是将其替换为独立的 SQLAlchemy 版本。

我找到了一个相关链接,但这与运行最新的 python sqlite 库版本有关。

如何在virtualenv内升级python 2.7.3中的sqlite3?

python sqlite sqlalchemy

5
推荐指数
1
解决办法
3262
查看次数

如何在UML中绘制导入?

我知道继承、组合、聚合等如何用 Java 实现并用 UML 绘制。但是如果 A 类导入 B 类,我们如何在 UML 中注意到这一点呢?这两个类在类图中是否以任何方式关联,如果是的话,以什么方式关联?

例子

import com.example.Book;

public class Library {
    public void doSomething(Book book)  {
//      ...
    }
}
Run Code Online (Sandbox Code Playgroud)

java architecture oop import uml

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

为什么在网络服务器中单独提供静态文件?

似乎大多数 Web 服务器(Apache、Nginx、Lighthttpd)都将静态文件与 html 文件(不同的配置)分开提供服务。为什么是这样?

我正在尝试使用 Apache 部署我的 Django 应用程序,到目前为止,部署一直很简单。在开发过程中,Django 服务器提供静态文件,我无需费心去配置它。为什么它在真正的网络服务器中有所不同?

apache django static file nginx

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

switch语句是否等于===或==?

Javascript switch语句是严格比较还是通过类型转换进行比较?

javascript comparison switch-statement

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