面向对象OO 设计、架构终极理解, 以及如何学习一个领域

2023-11-14

程序就是一些互相引用的内存快,互相发消息。

每个内存块就是一个状态机,状态的迁移规则是定制好的一些消息(方法)。构造函数用来初始化状态。

一个内存块的方法除了改变自身状态,也有可能向引用的别内存快发消息,引起别的内存块发生状态转移。


重点不在过程化的code,而在对象的状态,code只是定制好的对象状态转移的规则,重在掌握状态怎么转移,对象之间关系,维护一种不变式、模型的完整性。

程序运行就是对象状态转移,一切都是状态,结果也是对象的状态。


有些对象封装外部资源,比如文件、数据库。也是状态——外部的、persistent状态。外部资源的操作也是通过向内存快对象发送消息实现的,是一样的。从OO设计的角度,这个世界只有一种东西,就是对象。外部资源也是封装为对象的,或者说外部资源,比如文件、数据库、远程Server,并不是OO系统之外的东西,也是对象,代表着状态。对象是这些外部资源之上的抽象和封装。带着这个领悟再去看cc150上OO design那些例子。


什么是设计?设计就是去决定一个东西(对象)而不是一个流程,逻辑。设计就是对象设计,对象本身的状态,状态转移规则,以及和其他对象的关系。从维护不变式的角度,就是维护Model的完整性,对象自身的状态的完整性,对象之间关系的完整性。


要像建筑学那样看待代码,就是一个一个的build block。


所有的service 都是data service, or bit service,架构师的眼里只有,读、写,内存块,disk, process,inter process channels


一般的学习方法也是类似的,输入是流式的,一节课一节课,一章一章,逻辑推导。但学习的结果是一个结构,知识结构,概念结构。也就是一堆概念,以及这些概念之间的关系。学习一个领域的的结果就是掌握了这个领域的一些核心概念,以及概念之间的关系,面向概念和概念之间关系这样一种稳定的结构,而不是一堆动态的、过程、逻辑流程。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象OO 设计、架构终极理解, 以及如何学习一个领域 的相关文章

  • Out of Distribution(OoD)检测相关方法综述

    1 Softmax based 方法 这类方法利用预训练模型输出的最大 softmax 概率进行统计分析 xff0c 统计发现 OOD 样本和 ID 样本 softmax 概率的分布情况 xff0c 试图将二者的分布差距加大 xff0c 然
  • OOD七大原则

    1 单一职责原则 xff08 Single Responsibility Principle xff09 一个类或一个接口只有一个职责 xff0c 有且仅有一个原因引起变化 2 开闭原则 xff08 Open Closed Principl
  • 资源调度器的一些基本问题

    1 调度算法 Capacity based DRF dominant recourse fairness label based等 多态化 插件化 可以多种策略一起工作 对应于不同Job 优先级 job特性 service or batch
  • 爬虫中网页分析的几种技术

    一般来说我们只抓取网页中的特定数据 比如抓取某人所有的blog 我们就只关心list 页面中文章列表那部分的链接和title 有几种技术可以用来分析网页 1 正则匹配 2 一般字符串匹配content substring pattern s
  • 自己动手写一个key value store

    一涉及到persistent 哪怕只是最基本的需求 很多人都会依赖数据库 或是其他现成的库或工具 确实 对于文件 大部分人很少直接打交道 或者只是诸如整体反序列化 序列化 按行读取 append new line等有限的操作 一个persi
  • 还是搜索、索引的问题

    搜索要弄清2个基本问题 1 要搜索出什么类型的entity 2 entity的哪个方面 维度和关键词发生关联的 一般来说可以有多个角度link到entity 一个entity支持多个索引 可以从不同的column检索 对于 web sear
  • random_queue:支持push, popRamdom的数据结构

    pop哪一个元素 决定了queue stack priority queue的不同 新加一个random queue 等概率的从集合里取出一个元素pop 1 先用rand int l int r 得到一个随机位置 2 和top交换 3 to
  • 电梯系统OO设计

    理论上应该先黑盒用例 分析需要求 系统边界的输入输出 再白盒类图 但是对于现实世界模拟的OO 个人感觉先emulate现实世界 初步识别类和类之间的关系 再用用例和顺序图丰富 修正类图 识别类 最主要的原则是封装 数据和数据的操作封装成一个
  • 一些常见面试OO design题目总结

    最近很多公司面试喜欢问一些OO design的题目 我总结了一些比较高频的题目 需求不一定准确 设计的也不一定好 欢迎提出建议 1 电梯设计 2 停车厂设计 3 通用卡牌游戏blackjack设计 4 1 电梯设计 需求 以面向对象的方式设
  • 一致性的3种协议,并发,事务

    Two Phase Commit MVCC Paxos TPC对应于传统数据库上的local cluster的一致性 分布式事务 每个节点上的local事务可以是不同的亦可以是相同的 replica MVCC的思想是抓住Transactio
  • 一个完整的语法分析、词法分析例子——Universal Pasrser

    需求 用户用formal notation指定语法 词法 然后可以匹配相应的文本 用法类似正则表达式 只需给出formal notation 不需要为每一种格式的文本单独写匹配器 formal notation主要是3个部分 1 BNF 列
  • 再谈type ahead 问题

    问题 给定一个词典 包括一些词和其出现的频率 实现type ahead功能 要求用户每键入一个字符 下拉框显示以当前输入为前缀的前10个最热门的词 解法1 用不带data的Trie data仅仅是词频 实时查询法 需要实时的去build h
  • 算法也要面向对象OO

    直接去模糊的去写 通过调试 一步步改 就算最后写出来了也不知道怎么写出来的 一定要先有整体思路 面向操作会很凌乱 算法也要面向对象 识别出变量 定义有确切含义的变量 以及这边变量之间互动的关系 时刻维护变量意义的正确性 也就是invaria
  • 搜索提示是如何实现的

    经典的想法就是一个Trie的 keysWithPrefix 问题 更高级的 进一步考察 keysWithPrefix需要做prefix下的inOrder遍历 但是每当用户type下一个字符 那个提示列表瞬间就显示出来了 不像是遍历很大一棵树
  • redis中hashtable 的 rehash/ resizing 策略

    依赖于连续存储的数据结构 具体的 就是依赖array 都有一个resizing问题 对于vector 一般的策略就是满的时候double and copy 降到1 4时候 halve and copy Hashtable也可以这么做 均摊的
  • 大数据问题汇总

    1最基本的 一个数据流 文件 求top k biggest solution 维护大小为K的最小堆 和堆顶比 大于堆顶的加入堆 堆顶相当于准入门槛 如果size 超过K 移除堆顶 vector
  • 基于HashHeap的LFU实现

    普通heap支持的操作和queue stack一样 就是push pop 只是pop出的是最小值 具体点就是add delMin hashheap支持一般HashMap的功能 同时维护最小值 和LinkedHashMap是对等的 后者是Ha
  • 面向对象OO 设计、架构终极理解, 以及如何学习一个领域

    程序就是一些互相引用的内存快 互相发消息 每个内存块就是一个状态机 状态的迁移规则是定制好的一些消息 方法 构造函数用来初始化状态 一个内存块的方法除了改变自身状态 也有可能向引用的别内存快发消息 引起别的内存块发生状态转移 重点不在过程化
  • mds的 labelIndex 静态预排序

    一般排序是数据 doc resultItem 取出来之后 按某个某个字段的值排序 也就是必须拿到doc resultItem之后才能排序 mds排序的特点是在取resultItem之前就排序 不是对resultItem排序 而是对docId
  • 再谈缓存

    凡是涉及管理数据的系统 都可以用图书馆来考虑 都要面临图书的位置查找和实际摆放两个问题 对应的两大组件就是就是index store 所有的数据管理系统都包含这两部分 缓存从过期又什么触发的角度分为容量触发和时间触发 容量触发 就是缓存满了

随机推荐