OO之美3
面向对象和基于对象
基于对象:所以基于对象,就是一种对数据类型的抽象,封装一个结构包含了数据和函数,然后以对象为目标进行操作.构建的基础是对象,但是操作对象并不体现出面向对象的继承性,也就是基于对象局限了通过对象模式板产生对象的福利.基于对象,不具有继承特性,也就更无所谓多态,但是对象本身的封装性仍然作为很多技术的基础,例如可以设置属性,调用方法,基于对象的语言特征就是将属性或者方法,包含在以对象为结构的组织中.然而,并不能通过"继承"访问父类对象的属性,方法.这是二者本质的区别所在.
从运行时的角度来看,基于对象的操作可以在编译时确定,不需要虚分派机制的额外消耗,但是必然少了多态带来的类型决断在运行时的灵活性.
二者差别
c#就是面向对象语言.JS就是基于对象语言.关键点看是否能现实多态,能否实现继承
总而言之,面向对象与基于对象,二者的概念主要体现在:
⑴继承是区别面向对象与基于对象的核心所在,对于少了继承性的基于对象来说,自然少了多态性的支持.
⑵封装是面向对象与基于对象的共同特征
也谈.Net闭包
(使用lamda表达式就是一种代表)
闭包,广泛存在于函数式编程语言的概念中,很多高级语言例如:Smalltalk,JavaScript,Ruby还有Python对闭包都有或多或少的支持.因此,在.NET平台中,对闭包的支持也不能例外,本文就以此为话题,探讨相关的内容.
本质上,闭包源自数据概念.在编程语言领域,闭包的概念主要是指由函数以及函数相关的上下文环境组合而成的实体.通过闭包,函数与其上下文变量(又被称为自由变量,表示局部变量之外的变量)之间建立起关联关系,上下文变量的状态可以在函数的多次调用过程中持久保持.从作用域的角度而言,私有变量的生存期被延长,函数调用所生成的值在下次调用时扔被保持.从安全性的角度而言,闭包有利于信息的隐蔽,私有变量只在该函数内可见.
闭包,是函数式编程的精灵,在.NET平台中,这个精灵同样带来诸多方面的应用,典型的表现主要体现在以下几方面
㈠定义控制结构,实现模块化应用.闭包实现了以最简单的方式开发粒度最小的模块应用.实现一定程度的算放复用.
㈡多个函数共享相同的上下文环境,进而实现通过上下文变量达到数据交流作用.
利用好闭包,可以达到函数式编程的作用.形成闭包有一些值得总结的非必要条件:
⑴嵌套定义的函数
⑵匿名函数
⑶将函数作为参数或者返回值
谈谈闭包与函数:
像对象一样的操作函数,是闭包发挥的最大作用,从而实现了模块化的编程方式.不过,闭包与函数还是有区别的:
1,闭包是函数与其引用环境组合而成的实体.不同的引用环境和相同的函数可以组合产生不同的闭包实例
2,函数是一段可执行的代码体,在运行时不会由于上下文环境发生变化.
闭包福利:
代码简化,数据共享与延迟,安全性
闭包缺陷:
不可避免使逻辑变的复杂,闭包的延迟性也带来一定的逻辑问题.
OO之美3的更多相关文章
- 《你必须知道的.NET》读书笔记三:体验OO之美
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.依赖也是哲学 (1)本质诠释:“不要调用我们,我们会调用你” (2)依赖和耦合: ①无依赖,无耦合 ...
- OO之美4(好代码与坏代码)
前言:写代码不仅仅要做到能与机器交流,更要做到能和人交流 编码规范:编码规范就是最佳实践,是前辈在编码这件事上的积累和总结,是智慧的延续和工业的实践,如下: ⑴命名规范 ⑵避免行数过多的方法 ⑶代码缩 ...
- OO之美2
面向对象并没有想象中那么神秘,以生活的现实眼光来看更是如此.把面向对象深度浓缩起来,可以概括为: ⑴目标:重用,扩展,兼容 ⑵核心:低耦合,高内聚 ⑶手段:封装变化 ⑷思想:面向接口编程,面向抽象编程 ...
- OO之美
㈠ 设计的分寸 对于设计,还有很多看似"惯常"的法则与经验广泛存在于软件系统中,例如除了经典的23种设计设计模式.还有很多模式之外的模式,按照粒度的大小,系统的特点,规模的大小,而 ...
- 《必须知道.NET》3.OO之美
3.2 依赖的哲学 3.2.1 本质诠释 "不要调用我们,我们会调用你" 3.2.2 什么是依赖,什么是抽象 "耦合是不可避免的" (1)什么是依赖和耦合 依赖 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- 设计模式之美:Type Object(类型对象)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Type Object 的经典介绍. 实现方式(二):Type Object 在游戏设计中的使用. 意图 允许在运行时动态灵活的 ...
- 结对编程-地铁续(有种上个学期OO的既视感)
我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...
- 菜鸡谈OO 第二单元总结
“欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...
随机推荐
- BZOJ 1121 & science
1121: [POI2008]激光发射器SZK Time Limit: 10 Sec Memory Limit: 162 MB Submit: 647 Solved: 537 [Submit][Sta ...
- 移动互联网终端的touch事件,touchstart, touchend, touchmove
如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP,这个页面上肯定是有很多可点击区域的,如果用户触摸到了那些可点击区域怎么办呢??诸如智能手机和平板电脑一类的移动设备通常会有一 ...
- 【BZOJ】1074: [SCOI2007]折纸origami
http://www.lydsy.com/JudgeOnline/problem.php?id=1074 题意:一开始有一个左上角是(0,100),右下角是(100,0)的纸片,现在可以沿有向直线折n ...
- 【BZOJ】1076: [SCOI2008]奖励关(状压dp+数学期望)
http://www.lydsy.com/JudgeOnline/problem.php?id=1076 有时候人蠢还真是蠢.一开始我看不懂期望啊..白书上其实讲得很详细的,什么全概率,全期望(这个压 ...
- 【BZOJ】1878: [SDOI2009]HH的项链(树状数组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1878 我太弱了,看题解才过的. 一开始看到此题,我想了想在线做法,但之后觉得这个想法可能是错的:维护 ...
- COJ976 WZJ的数据结构(负二十四)
试题描述 输入一个字符串S,回答Q次问题,给你l,r,输出从Sl--Sr组成的串在S中出现了多少次. 输入 第一行为一个字符串S.第二行为一个正整数Q.接下来Q行每行为l,r. 输出 对于每个询问,输 ...
- lightning mdb 源代码分析(4)—MVCC/COW
本博文将描述MVCC和cow技术以及LMDB中如何使用以及实现这两种技术. COW(Copy On Write): COW技术背后的思想是拖延技术,基本方法是假如有多个调用者需要访问的资源,在其初始化 ...
- foreach语句
foreach语句他无非就是for循环的封装,为了提高开发速度才创造出来的.他其实跟for循环一样,只不过写起来比较简便,他是1.5版本才出来的一种封装语法.并没有什么奇特之处他里面的机制就是for循 ...
- [听课笔记]Professor Michael Cusumano's New Book:" Strategy Rules: Five Timeless Lessons from Bill Gates, Andy Grove, and Steve Jobs"
1. Look Forward, Reason Back Extrapolate, interpret, then tie vision to concrete actions2. Make Big ...
- Memcached 笔记与总结(6)PHP 实现 Memcached 的一致性哈希分布算法
首先创建一个接口,有 3 个方法: addServer:添加一个服务器到服务器列表中 removeServer:从服务器列表中移除一个服务器 lookup:在当前的服务器列表中找到合适的服务器存放数据 ...