面向对象和基于对象

基于对象:所以基于对象,就是一种对数据类型的抽象,封装一个结构包含了数据和函数,然后以对象为目标进行操作.构建的基础是对象,但是操作对象并不体现出面向对象的继承性,也就是基于对象局限了通过对象模式板产生对象的福利.基于对象,不具有继承特性,也就更无所谓多态,但是对象本身的封装性仍然作为很多技术的基础,例如可以设置属性,调用方法,基于对象的语言特征就是将属性或者方法,包含在以对象为结构的组织中.然而,并不能通过"继承"访问父类对象的属性,方法.这是二者本质的区别所在.

从运行时的角度来看,基于对象的操作可以在编译时确定,不需要虚分派机制的额外消耗,但是必然少了多态带来的类型决断在运行时的灵活性.

二者差别
c#就是面向对象语言.JS就是基于对象语言.关键点看是否能现实多态,能否实现继承

总而言之,面向对象与基于对象,二者的概念主要体现在:
⑴继承是区别面向对象与基于对象的核心所在,对于少了继承性的基于对象来说,自然少了多态性的支持.
⑵封装是面向对象与基于对象的共同特征

也谈.Net闭包

(使用lamda表达式就是一种代表)
闭包,广泛存在于函数式编程语言的概念中,很多高级语言例如:Smalltalk,JavaScript,Ruby还有Python对闭包都有或多或少的支持.因此,在.NET平台中,对闭包的支持也不能例外,本文就以此为话题,探讨相关的内容.
本质上,闭包源自数据概念.在编程语言领域,闭包的概念主要是指由函数以及函数相关的上下文环境组合而成的实体.通过闭包,函数与其上下文变量(又被称为自由变量,表示局部变量之外的变量)之间建立起关联关系,上下文变量的状态可以在函数的多次调用过程中持久保持.从作用域的角度而言,私有变量的生存期被延长,函数调用所生成的值在下次调用时扔被保持.从安全性的角度而言,闭包有利于信息的隐蔽,私有变量只在该函数内可见.

闭包,是函数式编程的精灵,在.NET平台中,这个精灵同样带来诸多方面的应用,典型的表现主要体现在以下几方面
㈠定义控制结构,实现模块化应用.闭包实现了以最简单的方式开发粒度最小的模块应用.实现一定程度的算放复用.
㈡多个函数共享相同的上下文环境,进而实现通过上下文变量达到数据交流作用.
利用好闭包,可以达到函数式编程的作用.形成闭包有一些值得总结的非必要条件:
⑴嵌套定义的函数
⑵匿名函数
⑶将函数作为参数或者返回值

谈谈闭包与函数:
像对象一样的操作函数,是闭包发挥的最大作用,从而实现了模块化的编程方式.不过,闭包与函数还是有区别的:
1,闭包是函数与其引用环境组合而成的实体.不同的引用环境和相同的函数可以组合产生不同的闭包实例
2,函数是一段可执行的代码体,在运行时不会由于上下文环境发生变化.

闭包福利:
代码简化,数据共享与延迟,安全性
闭包缺陷:
不可避免使逻辑变的复杂,闭包的延迟性也带来一定的逻辑问题.

OO之美3的更多相关文章

  1. 《你必须知道的.NET》读书笔记三:体验OO之美

    此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.依赖也是哲学 (1)本质诠释:“不要调用我们,我们会调用你” (2)依赖和耦合: ①无依赖,无耦合 ...

  2. OO之美4(好代码与坏代码)

    前言:写代码不仅仅要做到能与机器交流,更要做到能和人交流 编码规范:编码规范就是最佳实践,是前辈在编码这件事上的积累和总结,是智慧的延续和工业的实践,如下: ⑴命名规范 ⑵避免行数过多的方法 ⑶代码缩 ...

  3. OO之美2

    面向对象并没有想象中那么神秘,以生活的现实眼光来看更是如此.把面向对象深度浓缩起来,可以概括为: ⑴目标:重用,扩展,兼容 ⑵核心:低耦合,高内聚 ⑶手段:封装变化 ⑷思想:面向接口编程,面向抽象编程 ...

  4. OO之美

    ㈠ 设计的分寸 对于设计,还有很多看似"惯常"的法则与经验广泛存在于软件系统中,例如除了经典的23种设计设计模式.还有很多模式之外的模式,按照粒度的大小,系统的特点,规模的大小,而 ...

  5. 《必须知道.NET》3.OO之美

    3.2 依赖的哲学 3.2.1 本质诠释 "不要调用我们,我们会调用你" 3.2.2 什么是依赖,什么是抽象 "耦合是不可避免的" (1)什么是依赖和耦合 依赖 ...

  6. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  7. 设计模式之美:Type Object(类型对象)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Type Object 的经典介绍. 实现方式(二):Type Object 在游戏设计中的使用. 意图 允许在运行时动态灵活的 ...

  8. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

  9. 菜鸡谈OO 第二单元总结

    “欢迎来到(玄学)多线程的新世界” Homework1 单部傻瓜电梯调度 Part1 多线程设计策略 第一次学到了线程这个概念,与之前的编程体验大有不同.最大的区别在于从原本的线性发生程序变成了多个行 ...

随机推荐

  1. JQuery LazyLoad实现图片延迟加载-探究

    对于大量图片的网站,图片延迟加载是提高速度和性能的好方法. 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片):二是自动预加载(加载完首屏后n秒后自动加载其他位置的图片).大体常用的 ...

  2. 导出一个EXCEL,多个SHEET

    Infragistics.Excel. Workbook work = new Infragistics.Excel.Workbook();                         Infra ...

  3. GIT用法总结

    1 git中的几种文件状态 a 未被git跟踪的文件,即是没有使用git add添加到git索引的的文件:untracked; b 没有修改但是已经被git跟踪的文件,即是使用git add添加到gi ...

  4. oracle函数listagg的使用说明(分组后连接字段)

    关于oracle函数listagg的使用说明 工作中经常遇到客户提出这样的需求,希望在汇总合并中,能够把日期逐个枚举出来. 如图,原始数据是这样的: 客户希望能够实现这样的汇总合并: 那么通常我会使用 ...

  5. 五、Pillar数据管理中心

    Pillar是数据管理中心. Pillar在saltstack中主要作用是存储和定义一些配置管理中需要的信息(比如:软件版本,用户名,密码等) 修改pillar相关配置文件: [root@super6 ...

  6. Ubuntu 14.04 使用的一些笔记

    1. 今天下载了安卓的2.3.5的源代码,解压tar的时候,发现一个错误中断了解压过程: could not create the hard link file, 看了一下基本上都是每个主目录下的 . ...

  7. JavaScript对下一个元旦倒计时,经常用于网店限时销售

    <div>距离下一个元旦还有多久:</div> <div id="timer"></div> <script type=&qu ...

  8. CSS系列:表达式(Expression)`淘汰`

    概述 CSS表达式是动态设置CSS属性的强大(但危险)方法.Internet Explorer从第5个版本开始支持CSS表达式. 兼容性 expression方法在其它浏览器中不起作用,因此在跨浏览器 ...

  9. Mybatis resultMap空值映射问题解决

    Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的 ...

  10. Yii2目录结构

    assets   前端资源文件夹,大致用于管理css js等前端资源文件等 commands   包含命令行命令  文件为控制器文件 config 应用程序的配置文件 controllers 控制器文 ...