函数封装

聚焦JavaScript面向对象的思想

馋奶兔 提交于 2019-12-22 21:04:38
面向对象是一种软件开发方法,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。随着时代的发展,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程,今天我们就来学习一下JavaScript面向对象的思想。 面向过程和面向对象编程概述 面向过程编程就是分析出解决问题的步骤,然后使用函数把这些步骤一步步实现,重心放在完成的每个过程上。 面向对象则是以封装的思想,将问题分析得到的数据封装成一个个的对象,然后通过对对象的操作来完成相应的功能。 举个栗子:厨师炒菜 以面向过程的思想来分析应该分为下面几个步骤: ​ 1.检查食材是否齐全 2.如果不不够,去菜市场买菜 3.洗菜 4.开火 5.按炒菜(按顺序放入相应的食材,调料等) 6.出锅装盘 以面向对象的思想分析则是这样的: ​ 1.厨师,检查食材,炒菜 2.采购员,去菜市场买菜 3.墩子,洗菜,切菜,备菜 ​ 通过调用上面对象中的行为方法即可完成炒菜的整个过程 从上面的例子可以看出,面向对象和面向过程最大的不同在于,面向对象关心的是由哪些对象,每个对象应该有哪些功能,而面向过程关心的是实现过程中的每个步骤。 那么这两种思想到底孰优孰劣呢?从表面上看,貌似面向对象更好,为什么呢

用DLL方式封装MDI子窗体

穿精又带淫゛_ 提交于 2019-12-22 08:41:26
用DLL方式封装MDI子窗体是一种常用的软件研发技术,他的长处: 研发人员能够负责某一个模块的编写包括(界面+逻辑),能够互不干扰,模块研发完成后,主程式统一调用。 易于程式升级,当程式升级时,不用编译主exe文档,更新某个DLL就能够升级。 能够根据客户不同的需求、价钱给他们不同的模块。(奸商都愿意用这招) 最近用到这个技术,因为小弟没有用过,在网上google了一下,对他有了了解,我用的是基于COM的DLL,下面总结如下: 想在DLL中封装MDI子窗体,要注意以下几点: 您的DLL中的接口要有两个参数:第一,主程式的Application对象;第二,主程式窗体对象; 您要重写DLL入口函数 假如是基于COM的,要注意:因为COM没有TApplication和TForm类型,您在传入时需要强转为Integer。 需要注意的就这么多,下面结合例子看看(假设您已建立了工程): TComDllTest1 = class(TAutoObject, IComDllTest1) Private FMsgStr: WideString; function GetMDIForm(AForm: TForm): boolean; protected { Protected declarations } function Get_MsgStr: WideString; safecall;

php curl封装类

元气小坏坏 提交于 2019-12-22 00:47:29
一个php curl封装的类,减少代码量,简化采集工作。这个类也是我工作的最常用的类之一。这里分享给大家。配合上phpquery,十分好用。 <?php namespace iphp\core; use iphp\App; /** * 封装了的curl http请求类 * @author xuen */ class MyCurl { public $ch; // 当前链接对象 public $str = ''; // 当前串 public $match; // 正则表达式 /** * 将curl常量属性转变成一个数组,便于使用 * @var string */ public $defaultOpt = array( CURLOPT_URL => '', // 请求的URL CURLOPT_RETURNTRANSFER => 1, // 设置有返回信息,以流的形式返回,非不是直接输出 CURLOPT_HTTPGET => 1, // 设定为GET请求。 // 定义默认的回调函数,这样exec()将在成功后返回1 CURLOPT_CONNECTTIMEOUT => 30, // 设置默认链接超时间为30秒 CURLOPT_TIMEOUT=>30,//设置下载时间最多30秒。 // 自动跟踪重定向。 CURLOPT_FOLLOWLOCATION => true, //

封装继承多态到底讲的是什么

青春壹個敷衍的年華 提交于 2019-12-21 09:03:18
封装继承多态到底讲的是什么 封装、继承、多态并不是针对C#语言提出来的,他是一个在面向对象思想下产生的一个概念。所以想要弄明白封装、继承、多态,首先就要先了解面向对象概念。封装:当我们提及面向对象的时候,这个对象怎么来?就是通过我们人为的封装得来。封装就是把一些特征或功能组合到一个抽象的对象上。就比如说电脑:它的特征是有一个显示屏,有一个主机,有鼠标和键盘等等。功能有计算等。那我们把这些特征和功能组合到“电脑”这个抽象的名词上时,“电脑”于是就有了这些特征和功能。但这个“电脑”不是实物,它代表所有名叫“电脑”的实物的名称。在C#中,我们把封装好的抽象的名词叫"class",所以我们称“电脑”叫一个类(class),而实体电脑叫这个类的对象(或者叫实例)。 而继承、多态则是类的特性。 继承:这个词就用正常的语义来解释就可以了,比如说你继承了你父亲的优点。而在C#中类也是可以继承的(单继承),比如说我们有了“电脑”这个类,现在我们再定义一个类叫“联想电脑”,难道我们要把电脑的特征、功能再定义一遍?可以是可以的,但是这样一方面代码有点重复,另一方向也不方便管理和说明“联想电脑”的特征。所以我们可以让“联想电脑”继承于“电脑”这个类,我们称“联想电脑”为“电脑”的子类或派生类,而“电脑”叫做父类或基类。这样,只要“电脑”有的东西,“联想电脑”都有,但是“联想电脑”还可以进化出(再添加

Python常用的标准库以及第三方库

此生再无相见时 提交于 2019-12-21 04:24:32
参考: https://www.cnblogs.com/jiangchunsheng/p/9275881.html 20个必不可少的Python库也是基本的第三方库 读者您好。今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们。他们是: Requests.Kenneth Reitz写的最富盛名的http库。每个Python程序员都应该有它。 Scrapy.如果你从事爬虫相关的工作,那么这个库也是必不可少的。用过它之后你就不会再想用别的同类库了。 wxPython.Python的一个GUI(图形用户界面)工具。我主要用它替代tkinter。你一定会爱上它的。 Pillow.它是PIL(Python图形库)的一个友好分支。对于用户比PIL更加友好,对于任何在图形领域工作的人是必备的库。 SQLAlchemy.一个数据库的库。对它的评价褒贬参半。是否使用的决定权在你手里。 BeautifulSoup.我知道它很慢,但这个xml和html的解析库对于新手非常有用。 Twisted.对于网络应用开发者最重要的工具。它有非常优美的api,被很多Python开发大牛使用。 NumPy.我们怎么能缺少这么重要的库?它为Python提供了很多高级的数学方法。 SciPy.既然我们提了NumPy,那就不得不提一下SciPy。这是一个Python的算法和数学工具库

js 类的封装和继承(1)

青春壹個敷衍的年華 提交于 2019-12-21 02:06:51
prototype.js最令我心仪的功能之一,就是可以很容易使用类似JAVA语言一样的方式构建对象模型,如何使用prototype.js构建对象模型呢? 这是通过prototype.js定义的Class和Object两个对象来实现的。 假定我们需要构建一个Shape对象表示一种形状,这个形状有一个功能是把自己绘制出来,另外有一个子类Circle表示圆形,要实现这样的对象结构的完整代码如下: js 代码 var Shape = Class.create(); Shape.prototype={ initialize: function (){ }, paint: function (){ } }; var Circle = Class.create(); Circle.prototype=Object.extend( new Shape(), { //一个圆由中心点和半径组成 initialize: function (centerX,centerY,radius){ this .centerX = centerX; this .centerY = centerY; this .radius = radius; }, paint: function (){ } } 使用Class定义类 Class对象在声明其他的类的时候使用。用这个对象的create方法声明一个变量

聚焦JavaScript面向对象的思想

China☆狼群 提交于 2019-12-20 10:52:42
面向对象是一种软件开发方法,是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。随着时代的发展,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程,今天我们就来学习一下JavaScript面向对象的思想。 面向过程和面向对象编程概述 面向过程编程就是分析出解决问题的步骤,然后使用函数把这些步骤一步步实现,重心放在完成的每个过程上。 面向对象则是以封装的思想,将问题分析得到的数据封装成一个个的对象,然后通过对对象的操作来完成相应的功能。 举个栗子:厨师炒菜 以面向过程的思想来分析应该分为下面几个步骤: ​ 1.检查食材是否齐全 2.如果不不够,去菜市场买菜 3.洗菜 4.开火 5.按炒菜(按顺序放入相应的食材,调料等) 6.出锅装盘 以面向对象的思想分析则是这样的: ​ 1.厨师,检查食材,炒菜 2.采购员,去菜市场买菜 3.墩子,洗菜,切菜,备菜 ​ 通过调用上面对象中的行为方法即可完成炒菜的整个过程 从上面的例子可以看出,面向对象和面向过程最大的不同在于,面向对象关心的是由哪些对象,每个对象应该有哪些功能,而面向过程关心的是实现过程中的每个步骤。 那么这两种思想到底孰优孰劣呢?从表面上看,貌似面向对象更好,为什么呢

关于JavaScript面向对象那些事

佐手、 提交于 2019-12-20 10:49:16
当你在使用手机的时候,你会发现,你并不懂得其中的原理就会操作了,其实这就是面向对象的思想。面向对象还有很多地方都会运用到。JavaScript也不例外,现在跟随我的脚步,来学习一下吧。 面向过程和面向对象编程概述 面向过程编程就是分析出解决问题的步骤,然后使用函数把这些步骤一步步实现,重心放在完成的每个过程上。 面向对象则是以封装的思想,将问题分析得到的数据封装成一个个的对象,然后通过对对象的操作来完成相应的功能。 举个栗子:厨师炒菜 以面向过程的思想来分析应该分为下面几个步骤: ​ 1.检查食材是否齐全 2.如果不不够,去菜市场买菜 3.洗菜 4.开火 5.按炒菜(按顺序放入相应的食材,调料等) 6.出锅装盘 以面向对象的思想分析则是这样的: ​ 1.厨师,检查食材,炒菜 2.采购员,去菜市场买菜 3.墩子,洗菜,切菜,备菜 ​ 通过调用上面对象中的行为方法即可完成炒菜的整个过程 从上面的例子可以看出,面向对象和面向过程最大的不同在于,面向对象关心的是由哪些对象,每个对象应该有哪些功能,而面向过程关心的是实现过程中的每个步骤。 那么这两种思想到底孰优孰劣呢?从表面上看,貌似面向对象更好,为什么呢?因为它完全符合我们的正常思维方式,所以在接受度方面,面向对象的思想肯定是更好。但是面向过程也有他的优势,就是灵活便捷,而面向对象相对来说会更耗资源,更慢一点。 所以,至于以后使用哪一种

PHP添加图片水印、压缩、剪切的封装类

强颜欢笑 提交于 2019-12-20 01:30:07
给图片添加水印,其实就是把原来的图片和水印添加在一起,下面小编把最近整理的资料分享给大家。 php对图片文件的操作主要是利用GD库扩展。当我们频繁利用php对图片进行操作时,会自然封装很多函数,否则会写太多重复的代码。当有很多对图片的相关函数的时候,我们可以考虑将这些函数也整理一下,因而就有了封装成类的想法。    操作图片主要历经四个步骤: 第一步:打开图片 第二步:操作图片 第三步:输出图片 第四步:销毁图片   1,3,4三个步骤每次都要写,每次又都差不多。真正需要变通的只有操作图片的这一步骤了。操作图片又往往通过1或多个主要的GD函数来完成。    本文封装类里面的四种方法,文字水印(imagettftext()),图片水印(imagecopymerge()),图片压缩,图片剪切(imagecopyresampled()),其余的常用GD函数便不赘述。 直接上代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

装饰器实现缓存封装

烈酒焚心 提交于 2019-12-20 01:11:37
实现redis缓存装饰器,路由函数 func GetTopicDetail(context *gin.Context) { tid:=context.Param("topic_id") topics:=Topics{} DBHelper.Find(&topics,tid)//从数据库取 context.Set("dbResult",topics) //这里dbResult暂时写死,应该从配置文件中读取,每一次从数据库查询到的值都会写到 } 绑定handler到路由 v1.GET("/:topic_id", CacheDecorator(GetTopicDetail,"topic_id","topic_%s",Topic{})) 实现装饰器 func CacheDecorator(h gin.HandlerFunc,param string,redKeyPattern string,empty interface{}) gin.HandlerFunc { return func(context *gin.Context) { //redis判断 getID:=context.Param(param) //得到ID值 redisKey:=fmt.Sprintf(redKeyPattern,getID) conn:=RedisDefaultPool.Get() defer conn