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 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...
随机推荐
- HDU 1010 (DFS搜索+奇偶剪枝)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1010 题目大意:给定起点和终点,问刚好在t步时能否到达终点. 解题思路: 4个剪枝. ①dep&g ...
- topcoder SRM 591 DIV2 TheArithmeticProgression
#include <iostream> #include <cstdlib> using namespace std; class TheArithmeticProgressi ...
- TYVJ P1062 合并傻子 Label:环状dp
背景 从前有一堆傻子,钟某人要合并他们~但是,合并傻子是要掉RP的...... 描述 在一个园形操场的四周站着N个傻子,现要将傻子有次序地合并成一堆.规定每次只能选相邻的2个傻子合并成新的一个傻子,并 ...
- 【BZOJ】1054: [HAOI2008]移动玩具(bfs+hash)
http://www.lydsy.com/JudgeOnline/problem.php?id=1054 一开始我还以为要双向广搜....但是很水的数据,不需要了. 直接bfs+hash判重即可. # ...
- Metronic_下拉列表Select2插件的使用
这个插件是基于Select的扩展插件,能够提供更加丰富的功能和用户体验,它的github官网地址为:https://select2.github.io/,具体的使用案例,可以参考地址:https:// ...
- 关于后台管理linkbutton按钮几个重要属性的理解
<asp:LinkButton ID="lkbtnDelete" runat="server" CausesValidation="False& ...
- JAVA中使用FTPClient实现文件上传下载
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- 使用Objective-C的文档生成工具:appledoc
使用Objective-C的文档生成工具:appledoc 前言 做项目的人多了,就需要文档了.今天开始尝试写一些项目文档.但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.象 Ja ...
- Phaser中很多对象都有一个anchor属性
游戏要用到的一些图片.声音等资源都需要提前加载,有时候如果资源很多,就有必要做一个资源加载进度的页面,提高用户等待的耐心.这里我们用一个state来实现它,命名为preload. 因为资源加载进度条需 ...
- 将服务器上的某些特定日志统一保存至XPS文件
<APACHost.CSV> Hostname,IP,OSType srv1,10.103.22.22,Win2003 srv2,10.103.22.37,Win2008 Import ...