冰箱

函数式编程的杂七杂八(非常乱)

蓝咒 提交于 2020-03-30 05:42:09
1.把大象关进冰箱里问题 面向过程: 把大象关进冰箱里: 把冰箱门打开=> 大象放冰箱里=> 冰箱门关上 面向对象: 冰箱.开门() 冰箱.放入(大象) 冰箱.关门() 函数式: 关进(冰箱,大象): 关门(放入(开门(冰箱),大象)) —————————————————————————— 2. C#引入FP的特性被某些人称作语法糖,我一直有意把这种观点拖出来痛打一顿(注意不是把持有这种观点的人拖出来痛打),至于持有这种观点的人,我禁止你们写a+b*c,以后给我统统去写汇编 MOV EAX, [b] MUL EAX, [c] ADD EAX, [a] 当然前提是我能禁止得了。 —————————————————————————— 3.语言特性和编程范式完全是两码事 从某种程度上来说,C语言既能进行函数式编程,又能进行 在支持面向对象的语言里,我完全可以设计一个类似下面的类 class Search { virtual List Extend(Node node) virtual bool Beam(Node node) virtual bool CheckFinish(Node node) Node Search() { OrderedCollection openlist=new OrderedCollection(); openlist.put(node); while(

Java 面向对象 知识

被刻印的时光 ゝ 提交于 2020-03-27 00:49:21
1.面向过程和面向对象 面向过程:强调的是功能行为,以函数为最小单位, 考虑怎么做 。 面向对象:强调具备了功能的对象,以类/对象为最小单位, 考虑谁来做 。 面向过程 把大象放进冰箱 ① 把冰箱门打开 ② 抬起大象,塞进冰箱 ③ 把冰箱门关闭 面向对象 人 { 打开(冰箱) { 冰箱.开开(); } 抬起(大象) { 大象.进入(冰箱); } 关闭(冰箱) { 冰箱.闭合(); } } 冰箱 { 开开() { } 闭合() { } } 大象 { 进入(冰箱) { } } 2.类与对象 类:一类事物的描述,是抽象的、概念上的定义 对象:实实在在存在的个体,因而也称为实例(instance) 面向对象程序设计的重点是类的设计 设计类,就是设计类的成员。 3.类中属性的使用 属性 (成员变量) vs 局部变量 ①相同点: 定义变量的格式:数据类型 变量名 = 变量值 先声明,后使用 变量都有其对应的作用域 ②不同点 在类中声明的位置的不同 属性:直接定义在类的一对{}内 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量 关于权限修饰符的不同 属性:可以在声明属性时,指明其权限,使用权限修饰符。 常用的权限修饰符:private、public、缺省、protected --->封装性 局部变量:不可以使用权限修饰符。 默认初始化值的情况: 属性:类的属性

深入理解面向对象与面向过程

淺唱寂寞╮ 提交于 2020-03-22 11:23:23
面向对象&面向过程 什么是面向过程? 自上而下顺序执行,逐步求精; 其程序结构是按功能划分为若干个基本模块,这些模块形成一个树状结构; 各模块之间的关系尽可能简单,在功能上相对独立; 每一模块内部均是由顺序、选择和循环三种基本结构组成; 其模块化实现的具体方法是使用子程序。 程序流程在写程序时就已决定。 什么是面向对象? 把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。 对同类对象抽象出其共性,形成类。 类中的大多数数据,只能用本类的方法进行处理。 类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信 程序流程由用户在使用中决定。 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种编程思想 面向过程 1. 强调的是功能行为 2. 关注的是解决问题需要哪些步骤 面向对象 1. 将功能封装进对象,强调具备了功能的对象 2.关注的是解决问题需要哪些对象 理解面向对象-把大象装进冰箱 面向对象:把一个人看成一个对象, 这个人 可以打开冰箱,可以把大象装进冰箱,可以关冰箱 面向对象更加符合人的思考习惯,从执行者变成了指挥者 面向过程和面向对象 面向过程: 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向对象: 是把构成问题的事务分解成各个对象,每个对象都有自己独立的属性和行为,

面向对象的总结

孤街浪徒 提交于 2020-03-09 00:34:58
其实面向对象是一种编程思想,不用想的太复杂,可以想这个问题,把大象放进冰箱需要几步?面向的对象是什么,就是:打开冰箱放进大象关上冰箱,而面向过程就是这个事件的步骤,分步骤一步步实现,这就是面向过程。 需要实现拿出大象,只需要把“放进” 修改成“拿出”的步骤就可以了。 这就是面向过程,面向对象就是整个事件。 1.关键字createPerson和prototype以及__proto__ 原型对象的作用和语法 function createPerson ( ) { } createPerson . prototype . name = "admin" ; createPerson . prototype . show = function ( ) { console . log ( "hello" ) ; } console . log ( createPerson . prototype ) ; var p1 = new createPerson ( ) ; console . log ( p1 ) ; console . log ( p1 . __proto__ ) ; 最后会发现__proto__身上也能找到prototype添加的属性和方法。由此可以证明 createPerson.prototype 这个就叫原型对象。 那这个到底有什么用呢?首先要清楚原型对象也是一个对象

面向对象

杀马特。学长 韩版系。学妹 提交于 2020-03-04 10:24:25
面向对象 1、面向对象的理解   面向对象(Object Oriented)是一种程序设计的思想。   说面向对象之前,我们先来说说面向过程。来最经典的例子,把大象放进冰箱,1、打开冰箱。2、把大象放进去。3、关上冰箱。嗯,看着很合理,但是需要增加一些新的需求,比如大象放进冰箱以前先转个圈、放进去以后只关一半冰箱门、不放大象了放狮子等等一系列需求时,就需要把代码都捋一遍,再去改逻辑,这样的需求越来越多,那么代码就会越来越乱,难以维护。   于是就诞生了面向对象思想,一切皆对象。我们再用面向对象的思想去看上面的问题,可以拆成两个对象,大象和冰箱,冰箱负责开门关门,大象负责进冰箱,这样以后有新需求或者需求变更,我们只用关心具体的对象。   下面说一下面向对象的三个基本特征是:封装、继承、多态。 2、封装   通过上面的例子我们已经简单的用过封装了,将原本复杂混乱的逻辑,封装成一个个对象。每个对象只做自己的事情。再结合上面的例子,冰箱负责开门,你正常开也行,转个圈开也行,你最后只要把门打开就行;大象负责进冰箱,你跳着进走着进,最后你只要在冰箱里面就行。还有我们经常用的U盘,我们不用管它内部是怎么实现的,只需要用它提供的USB接口就行。   2.1 封装的理解   封装(Encapsulation)指一种实现细节部份包装、隐藏起来的方法。封装是为了防止对实现细节的访问

c++为什么用右值引用

≡放荡痞女 提交于 2020-02-26 22:51:45
右值引用是C++11中最重要的新特性之一,它解决了C++中大量的历史遗留问题,使C++标准库的实现在多种场景下消除了不必要的额外开销(如std::vector, std::string),也使得另外一些标准库(如std::unique_ptr, std::function)成为可能。即使你并不直接使用右值引用,也可以通过标准库,间接从这一新特性中受益。为了更好的理解标准库结合右值引用带来的优化,我们有必要了解一下右值引用的重大意义。 右值引用的意义通常解释为两大作用:移动语义和完美转发。本文主要讨论移动语义。 移动语义 ====== 移动语义,简单来说解决的是各种情形下对象的资源所有权转移的问题。而在C++11之前,移动语义的缺失是C++饱受诟病的问题之一。 举个栗子。 问题一:如何将大象放入冰箱? 答案是众所周知的。首先你需要有一台特殊的冰箱,这台冰箱是为了装下大象而制造的。你打开冰箱门,将大象放入冰箱,然后关上冰箱门。 问题二:如何将大象从一台冰箱转移到另一台冰箱? 普通解答:打开冰箱门,取出大象,关上冰箱门,打开另一台冰箱门,放进大象,关上冰箱门。 2B解答:在第二个冰箱中启动量子复制系统,克隆一只完全相同的大象,然后启动高能激光将第一个冰箱内的大象气化消失。 等等,这个2B解答听起来很耳熟,这不就是C++中要移动一个对象时所做的事情吗? “移动”

专题三 面向对象

我与影子孤独终老i 提交于 2020-02-04 12:31:33
/* 一、Java面向对象学习的三条主线: 1.Java类及类的成员:属性、方法、构造器;代码块、内部类 2.面向对象的三大特征:封装性、继承性、多态性、(抽象性) 3.其它关键字:this、super、static、final、abstract、interface、package、import等 “大处着眼,小处着手” 面向过程(POP) 与 面向对象(OOP) 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的 是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对 象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如 抽象、分类、继承、聚合、多态等。 二、“人把大象装进冰箱” 1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。 ① 把冰箱门打开 ② 抬起大象,塞进冰箱 ② 把冰箱门关闭 2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 人{ 打开(冰箱){ 冰箱.开开(); } 抬起(大象){ 大象.进入(冰箱); } 关闭(冰箱){ 冰箱.闭合(); } } 冰箱{ 开开(){} 闭合(){} } 大象{ 进入(冰箱){ } } 三、面向对象的两个要素: 类:对一类事物的描述,是抽象的、概念上的定义 对象:是实际存在的该类事物的每个个体

ES6 类和对象

旧巷老猫 提交于 2020-01-30 03:57:18
基本编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后函数把这些步骤一步一步实现,使用的时候再一个一个依次调用就可以了 面向过程就是按照我们分析好的步骤,按照步骤解决问题 面向对象 面向对象是把事物分解为一个个对象,然后对象之间分工合作 面向对象是以对象来划分问题,而不是步骤 特点 封装性 继承性 多态性 举例:将大象装进冰箱 面向过程做法: 1.打开冰箱 2.将大象放进去 3.关上冰箱门 面向对象做法: 1.大象对象 进去 2.冰箱对象 打开 关闭 3.使用大象和冰箱的功能 对比 面向过程 优点:性能别面向对象高,适合跟硬件联系紧密的东西,例如单片机就采用的面向过程编程 缺点:没有面向对象易维护、易复用、易扩展 面向对象 优点:易维护、易复用,由于面向对象有封装、继承、多态性的特性、可以设计出低耦合的系统,使系统更加灵活、更加易于维护 缺点:性能比面向过程低 ES6中的类和对象 对象 js中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。 对象是由属性和方法组成的: 属性:事物的特征,在对象中用属性来表示 方法:事物的行为,在对象中用方法来表示 类 class ES6中新增加了类的概念,可以使用 class 关键字声明一个类,之后以这个类来实例化对象 类抽象了对象的公共部分,它泛指某一大类(class) 对象特指某一个

UML之一、为什么需要UML?

我是研究僧i 提交于 2020-01-29 00:30:21
面向对象和面向过程是两种不同描述世界的方法。 面向过程:世界视为过程,世界由一个个相互关联的小程序构建来的, 是精密的 。      但是构成一个系统的因素太多,要把所有可能的因素都考虑到,把所有因素的因果分析都分析清楚,再把这个过程模拟出来实在是太困难了。 面向对象:世界视为对象,世界由一个个相互独立、相互之间没有因果关系的对象构成, 是独立的 。 但是难点在于为什么这样抽象对象?怎样组合对象?对象的组合表达了怎样的含义?( 面向对象存在的问题why how what ) 例如:把大象装进冰箱的两种方式 面向过程-每个过程有一个阶段性的目标,依次完成这些过程,就能把大象装进冰箱:   冰箱开门(打开门的冰箱)   冰箱装进(冰箱, 大象)   冰箱关门(冰箱) 面向对象-依次做这些动作(动作的执行者就是对象),就能把大象装进冰箱   冰箱.开门(),   冰箱.装进(大象.进冰箱),   冰箱.关门() 面向对象是把世界看作是由许多对象组成的,UML是一种是面向对象软件的标准化建模语言: 把现实世界映射到对象世界的方法; 从对象世描述现实世界的方法; 验证对象世界行为是否正确反映了现实世界的方法; UML优点:可视化、统一标准、人和机器皆可理解; UML建模要素:参与者(actor)、用例(use case)、业务对象模型 、业务场景(现实:人驱动,事体现过程,物记录结果

面向对象与面向过程

时光怂恿深爱的人放手 提交于 2020-01-21 01:58:18
面向过程:侧重于过程 ps:把大象关进冰箱需要几步: 1.开冰箱门 2.把大象装进冰箱 3.关冰箱门 面向对象:侧重于对象 ps:自己是上帝视角,创建一个大象,看着它自己把自己装进冰箱 二者优劣分析: 面向过程: 优点:编写比较简单 缺点:代码量大时,维护性差 面向对象: 优点:维护性好,可扩展性比较强 缺点:对于新手来说上手难度比较大 来源: https://www.cnblogs.com/hanhanstudy/p/12220050.html