" Every Saturday since we’ve lived in this apartment, I have awakened at 6:15, poured myself a bowl of cereal, added a quarter-cup of 2% milk, sat on this end of this couch, turned on BBC America, and
7.4 面向对象设计* 理解了面 向 对象的基 本 概念之后 , 就可以应 用 这些概念 来 进行面向 对 象 设 计(object-oriented design,简称 OOD)。 传统的程序设计方法是结构化的自顶向下设计,其思想是将软件系统分解为若干个功能, 每个功能都是对数据的一个操作过程。功能又可以划分为若干个子功能,如此反复分解下去, 直至每个功能所对应的操作过程显而易见为止。在分解功能
7.2.6 对象的集合体 一个复杂数据之“复杂”主要体现在两个方面:要么该数据是由大量成员数据组成的,要么该数据具有深层的内部结构。第 6 章介绍了如何利用各种集合体数据类型和数据结构来 表示数量复杂性,本章介绍的类则可以刻画内部结构的复杂性。 可以推想,如果将集合体类型与类相结合,就能表示现实中的任意复杂的信息。即,用 集合体表示大量的数据成员,而每个数据成员是一个具有复杂内部结构的对象。我们不
7.2 面向对象编程 OOP 的特色包括抽象、封装、消息、模块化、多态性、继承等。
7.1.2 面向对象观点 什么是面向对象?要回答这个问题,首先要理解面向对象思想中最基本的观点:数据和对数据的操作不可分离。 其实这个观点对我们来说并不完全陌生。通过第 2 章介绍的数据类型的概念,我们已经 意识到:特定的数据值与能对该数据执行的操作是密切关联的。对于数值型数据,合法的操 作不外乎加减乘除之类;对于字符串数据,合法的操作不外乎查找串中字符或子串、改变字 母大小写之类。脱离数据的类型
5.4.3 graphics 与面向对象 在 Tkinter 中,只为画布提供了类 Canvas,而画布上绘制的各种图形并没有对应的类。 因此画布是对象,而画布上的图形并不是对象,至少不是按面向对象风格构造的。graphics 模块就是为了改进这一点而设计的,它将 Tkinter 的绘图功能进行了全面的面向对象包装。 在 graphics 模块中,GraphWin、Point、Circle、Ova
3.1. 概述 本章介绍的是函数对象,可能称为'高阶函数'更为适合。 它实际上是指那些可以被传入到其它函数或是从其它函数返回的一类函数。 在C++中高阶函数是被实现为函数对象的,所以这个标题还是有意义的。 在这整一章中,将会介绍几个用于处理函数对象的 Boost C++ 库。 其中,Boost.Bind 可替换来自C++标准的著名的 std::bind1st() 和 std::bind2nd()
使用 Session.delete() 会把对象的状态从数据库中移除。当然,你的应用程序可能仍然持有一个指向已删除对象的引用。所以,最好这样理解:delete() 的用途是把一个持久实例变成瞬时(transient)实例。 sess.delete(cat); 你可以用你喜欢的任何顺序删除对象,不用担心外键约束冲突。当然,如果你搞错了顺序,还是有可能引发在外键字段定义的 NOT NULL 约束冲突。
事务中的持久实例(就是通过 session 装载、保存、创建或者查询出的对象) 被应用程序操作所造成的任何修改都会在 Session 被刷出(flushed)的时候被持久化(本章后面会详细讨论)。这里不需要调用某个特定的方法(比如 update(),设计它的目的是不同的)将你的修改持久化。所以最直接的更新一个对象的方法就是在 Session 处于打开状态时 load() 它,然后直接修改即可: D
Hibernate 认为持久化类(persistent class)新实例化的对象是瞬时(Transient)的。我们可通过将瞬时(Transient)对象与 session 关联而把它变为持久的(Persistent)。 DomesticCat fritz = new DomesticCat(); fritz.setColor(Color.GINGER); fritz.setSex('M');
组 件(Component)是一个被包含的对象,在持久化的过程中,它被当作值类型,而并非一个实体的引用。在这篇文档中,组件这一术语指的是面向对象的合 成概念(而并不是系统构架层次上的组件的概念)。举个例子,你对人(Person)这个概念可以像下面这样来建模: public class Person { private java.util.Date birthday; private
前面一节的 Fruit 类有两个实变量,分别表述水果的类型和状态.直到为这个类写了一个定制的inspect方法,我们方才了解它不会对一个缺乏属性的水果做出合理的解释.幸运的是,Ruby提供了一种允许实变量总是被初始化的方法. initalize方法 当Ruby创建一个新对象时,它总是会寻找一个名为 initialize 的方法并执行它.因此,我们可以简单通过一个initialize方法向实变量中加
面向对象是一个挺让人迷惑的措辞.叫一切东西都是面向对象会让别人觉得你很时髦. Ruby 声称自己是面向对象的脚本语言;但究竟什么才是"面向对象"? 我们已经有了各种各样的答案,但所有这些恐怕都归结于同一件事.与其快速地概括它,不如让我们先花点儿时间考虑一下传统的编程模式. 传统意义上,一个编程问题从出现的各种数据,以及处理数据的过程(procedures)着手.在这一模式下,数据是呆板,被动和无用
2d_canvas String - 画布. flash_3d String - Flash. flash_stage3d String - Flash 舞台3D. flash_stage3d_baseline String - Flash 舞台3D 基线配置. gpu_compositing String - 合成. multiple_raster_threads String - 多光栅线程.
还是由于 JavaScript 的限制,Vue 不能检测对象属性的添加或删除: var vm = new Vue({ data: { a: 1 } }) // `vm.a` 现在是响应式的 vm.b = 2 // `vm.b` 不是响应式的 对于已经创建的实例,Vue 不能动态添加根级别的响应式属性。但是,可以使用Vue.set(object, key, value)方法向嵌