精华内容
下载资源
问答
  • 对象专业化有缺点
    千次阅读
    2020-07-24 20:30:34

    Vue.Js的优点

    • 易于使用: Vue.js包含基于HTML的标准模板,可以更轻松地使用和修改现有应用程序。
    • 更顺畅的集成:无论是单页应用程序还是复杂的Web界面,Vue.js都可以更平滑地集成更小的部件,而不会对整个系统产生任何影响。
    • 更好的性能,更小的尺寸:它占用更少的空间,并且往往比其他框架提供更好的性能。
    • 精心编写的文档:通过详细的文档提供简单的学习曲线,无需额外的知识; HTML和JavaScript将完成工作。
    • 适应性:整体声音设计和架构使其成为一种流行的JavaScript框架。它提供无障碍的迁移,简单有效的结构和可重用的模板。

    缺点:

    • 与Angular和React相比,Vue.js框架的市场份额仍然很小。它正在快速流行,但与此同时,在使用Vue.js时,可能会出现大规模应用程序开发方面的问题。

    React的优点

    • 灵活性和响应性:它提供最大的灵活性和响应能力。
    • 虚拟DOM:由于它基于文档对象模型,因此它允许浏览器友好地以HTML,XHTML或XML格式排列文档。
    • 丰富的JavaScript库:来自世界各地的贡献者正在努力添加更多功能。
    • 可扩展性:由于其灵活的结构和可扩展性,React已被证明对大型应用程序更好。
    • 不断发展: React得到了Facebook专业开发人员的支持,他们不断寻找改进方法。
    • Web或移动平台: React提供React Native平台,可通过相同的React组件模型为iOS和Android开发本机呈现的应用程序。

    缺点:

    陡峭的学习曲线:由于复杂的设置过程,属性,功能和结构,它需要深入的知识来构建应用程序。

    相同点:

    React采用特殊的JSX语法,Vue.js在组件开发中也推崇编写.vue特殊文件格式,对文件内容都有一些约定,两者都需要编译后使用。

    中心思想相同:一切都是组件,组件实例之间可以嵌套。

    都提供合理的钩子函数,可以让开发者定制化地去处理需求。

    都不内置列数AJAX,Route等功能到核心包,而是以插件的方式加载。

    在组件开发中都支持mixins的特性。

    不同点

    1. vue 提供了一系列的api, 而react的api 很少
    2. vue的思想是响应式的,也就是基于是数据可变的,react整体是函数式的思想,是单向数据流,推崇结合immutable来实现数据不可变
    3. vue 采用了template, react采用了jsx (本质上都是模版)
    4. React依赖Virtual DOM,而Vue.js使用的是DOM模板。React采用的Virtual DOM会对渲染出来的结果做脏检查。
    5. Vue.js在模板中提供了指令,过滤器等,可以非常方便,快捷地操作DOM。
    更多相关内容
  • koa express 优缺点

    千次阅读 2019-05-13 23:31:00
    关于 Express 优点。Express 的优点是线性逻辑:路由...再说缺点。Express 是基于 callback 来组合业务逻辑。Callback 有两大硬伤,一是不可组合,二是异常不可捕获。Express 的中间件模式虽然在一定程度上解决这两...

     

    关于 Express

    优点。Express 的优点是线性逻辑:路由和中间件完美融合,通过中间件形式把业务逻辑细分,简化,一个请求进来经过一系列中间件处理后再响应给用户,再复杂的业务也是线性了,清晰明了。

    再说缺点。Express 是基于 callback 来组合业务逻辑。Callback 有两大硬伤,一是不可组合,二是异常不可捕获。Express 的中间件模式虽然在一定程度上解决这两个问题,但没法彻底解决。

    中间件模式就是把嵌套的异步逻辑拉平了,但它也只能是从较宏观的层面解耦顺序执行的异步业务,它无法实现精细的异步组合控制,比如并发的异步逻辑,比如有相对复杂条件控制的异步逻辑。人们通常会要借助 async、bluebird 等异步库。但即便有了这类异步库,当涉及到共享状态数据时,仍然不得不写出嵌套异步逻辑。

    对于 callback 的异常不可捕获的问题,下面这个示意想必大家能理会:

    someAPI.get(data, function (err, res) {
      throw error
    })

    每个人都不会期望这个 callback 里面 throw 一个异常,但估计每一个写 js 的都写出过这样的异常,这种异常可能会隐藏得很深,callback 模型下它是不可捕获的。

    关于 koa

    先说优点。首先,借助 promise 和 generator 的能力,丢掉了 callback,完美解决异步组合问题和异步异常捕获问题。
    其次,koa 把 express 中内置的 router、view 等功能都移除了,使得框架本身更轻量化。有些人可能会不习惯,但我认为这特别好。首先,把 express 各种中间件移植到 koa 是很简单的一件事;其次,express 中内置的功能件未必好,比如 view,想添加自己的 view engine 进入得做较深层次的 hack,又比如 router,它的效率不是最好的。koa 没有内置这些,给了社区很大的自由度,各位大神都能自由发挥制作出更精细更专业的中间件。当然这带来的另一个问题便是中间件良莠不齐,需要使用者自行甄选。

    再说缺点。首先是级联。我把这个东西理解为宏观层面的 callback。Express 中的 callback 问题是微观层面的问题,比如一个中间件内,可能不得不嵌套两三层 callback。但起码,这些 callback 在一起,能一眼看全,能完全掌控。koa 的级联使得所有中间件的逻辑关系变成了 callback 关系。如果项目简单,没问题;如果有高手坐镇,也没问题。当项目业务变庞大变复杂后,当不断有新人进入后,想让所有的开发人员掌握整个项目业务逻辑关系,应该就不是那么简单了。

    为什么要有级联,这其实是 promise 带来的副作用:promise 组合体的逻辑不能正常中断!有些 callback 能手初写 promise 时可能就会出现类似这样的逻辑:

    someAPI = function (data, callback) { otherAPI(data) .then(function (res) { if (res.something) callback(null, res) return doOther(res) }) .then(function (res) { callback(null, res) }) .catch(callback) } 


    promise 不能正常中断,哪怕你业务逻辑 callback 出去了,后面的 then 会继续运行!这只是个简单的示意,我想强调的任然是 promise 组合体不能正常中断!koa 把你所有的中间件所有的异步业务组合成了一个 promise 组合体。那么,koa 中如果第一个中间挂载了静态文件处理器,后面是 API 业务,当一个静态资源请求第一个中间就处理完毕了怎么办?如果按照 promise then 的逻辑那必然会往后面走,但级联解决了这个问题:所有后续逻辑被封装成 next 了,别调用它,就不会进到后续中间件逻辑。

    对于复杂的 koa 项目,要避免使用类似 express 中间件思想来开发,应该尽量发挥 koa 带来的异步控制组合能力,将各种异步业务在各大中间件内组合完毕。

    其次是代码安全问题,因为任意一个中间件都能访问到最顶层的 app 对象,第三方模块想作恶,那是完全有机会的。

    转载于:https://www.cnblogs.com/xiaosongJiang/p/10859754.html

    展开全文
  • 简单工厂模式就是让一个工厂类承担构建所有对象的职责。调用者需要什么产品,让工厂生产出来即可。 优点:将构建过程封装的好处不仅可以降低耦合,如果某个产品构造方法相当复杂,使用工厂模式可以大大减少代码重复...

    简单工厂模式

    简单工厂模式就是让一个工厂类承担构建所有对象的职责。调用者需要什么产品,让工厂生产出来即可。

    优点:将构建过程封装的好处不仅可以降低耦合,如果某个产品构造方法相当复杂,使用工厂模式可以大大减少代码重复。

    缺点:一是如果需要生产的产品过多,此模式会导致工厂类过于庞大,承担过多的职责,变成超级类;

    ​ 二是当生成新产品时,必须在工厂类中添加新的分支。这违背了开闭原则

    工厂方法模式

    工厂方法模式就是将简单工厂的各个职责拆分成专业职责的工厂类

    优点:工厂方法模式就是为了解决简单共厂模式的弊端诞生的。当生产的产品种类越来越多时,工厂类不会变成超级类(各个工厂的运行过程都可单独修改);当需要生产新的产品时,无需更改既有的工厂,只需要添加新的工厂即可。保持了面向对象的可扩展性,符合开闭原则。

    缺点:相比起简单工厂来说,工厂方法用户的操作类便多了,增加了用户端的代码量,但相比起其改进程度来说,这点问题还是能接受的

    抽象工厂模式

    抽象工厂模式时工厂方法模式的进一步改进,提取出其工厂接口

    优点:由于客户只调用抽象工厂中的方法(每个具体工厂都实现其方法,但在客户端的调用代码是一样的),这就使得替换工厂变得非常容易。也很好的继承了工厂方法模式的优点,很好的发挥了开闭原则、依赖倒置原则。

    缺点:抽象工厂模式太重了,如果抽象接口需要添加新功能,则会影响到所有的具体工厂类。所有工厂模式适合同类工厂这样的横向扩展需求,不适合增添新功能这样的纵向扩展。

    单例模式

    单例模式是在创建类时使该类能自行创建它的实例(在类中提供初始化功能)。

    单例模式有两种,分为懒汉模式和饿汉模式,懒汉模式是在类中提供一个初始化的函数(类如果没被初始化将其初始化,如果类被初始化了就结束调用),在需要的地方调用这个初始化函数;饿汉模式是在创建类的变量时就声明,然后给出一个声明函数返回该变量。其具体过程及各种优缺点参照我博客()。

    建造者模式

    建造者模式又叫生成器模式,将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示

    具体实现

    指挥者(Director)直接和客户(Client)进行需求沟通;

    沟通后指挥者将客户创建产品的需求划分为各个部件的建造请求(Builder);

    将各个部件的建造请求委派到具体的建造者(ConcreteBuilder);

    各个具体建造者负责进行产品部件的构建;

    最终构建成具体产品(Product)。

    优点

    1.使用建造者模式可以使客户端不必知道产品内部组成的细节。

    2.具体的建造者类之间是相互独立的,这有利于系统的扩展。

    3.具体的建造者相互独立,因此可以对建造的过程逐步细化,而不会对其他模块产生任何影响。

    缺点

    1.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。

    2.如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。

    原型模式

    原型模式,用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建细节。

    优点:

    使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法, 它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

    使用原型模式的另一个好处是简化对象的创建,使得创建对象就像我们在编辑文档时的复制粘贴一样简单。

    适配器模式

    将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不相容而不能工作的那些类可以一起工作。

    优点:

    复用了现存的类,解决了现存类和复用环境要求不一致的问题。

    一个对象适配器可以把多个不同的适配者类适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类都适配到目标接口。

    缺点:

    对于对象适配器来说,更换适配器的实现过程比较复杂。

    桥接模式

    将抽象部分与它的现实部分分离,使它们都可以独立地变化(实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合)

    桥接模式的使用场景:
    1、当一个对象有多个变化因素的时候,通过抽象这些变化因素,将依赖具体实现,修改为依赖抽象。
    2、当某个变化因素在多个对象中共享时。我们可以抽象出这个变化因素,然后实现这些不同的变化因素。
    3、当我们期望一个对象的多个变化因素可以动态的变化,而且不影响客户的程序的使用时。

    组合模式

    将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式对单个用户对象和组合对象具有使用一致性。

    缺点:客户端需要花更多时间理清类之间的层次关系

    优点:无需关系处理的单个对象,还是组合的对象容器,实现容器之间的解耦合。当有新部件时容易添加进来。

    何时用组合模式:

    需求中体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时。

    中介者模式

    用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其松耦合,而且可以独立地改变它们之间的交互。

    优点:

    将多对多的通信转化成多对一的通信,降低了系统的复杂性;Mediator还活得系统解耦的特性;将控制集中

    缺点:

    由于控制的集中化,于是把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂

    备忘录模式

    在不破坏封装的前提下捕获一个对象的内部状态,并在该对象之外保持这个状态。这样一会就可以将该对象恢复到原先保存的状态。

    使用备忘录模式的好处:
    1)有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
    2)本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需要的这些状态的版本。
    3)当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。

    使用备忘录模式的缺点:
    1)如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。
    2)当负责人角色将一个备忘录存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否很昂贵。

    状态模式

    当一个对象的内在状态改变时允许其改变其行为,这个对象看起来像是改变了其类。

    优点:

    将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在某个ConcreteState中,所以通过定义新的子类很容易增加新的状态和转换

    策略模式

    它定义了算法家族,分别封装起来,让他们之间可以相互替换,次模式让算法的变化不会影响到使用算法的客户

    优点:

    策略模式非常完美的符合了“开闭原则”,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。

    缺点:

    虽然策略模式定义了算法,但是它并不提供算法的选择,即什么算法对于什么问题最合适这是策略模式所不关心的,所以对于策略的选择还是要客户端来做。客户必须要清楚的知道每个算法之间的区别和在什么时候什么地方使用什么策略是最合适的,这样就增加客户端的负担。

    模板方法

    定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

    优点:

    通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,提供了一个很好的代码复用的平台

    访问者模式

    作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

    优点:

    把数据结构和作用于结构上的操作脱耦合,使得操作集合可以相对自由的演化

    缺点:

    使得增加新的数据结构比较困难

    (适用于数据结构相对稳定的系统)

    展开全文
  • 面向对象和面向过程的区别以及优缺点

    万次阅读 多人点赞 2015-12-22 22:58:32
     优点:性能比面向对象高,因为类调用时需要实例,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。   缺点:没有面向对象易维护、易复用、易...
    面向过程 

      优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 

      缺点:没有面向对象易维护、易复用、易扩展 

       面向对象 

      优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 

      缺点:性能比面向过程低 

       面向对象程序设计的一些显著的特性包括: 

      .程序设计的重点在于数据而不是过程; 

      .程序被划分为所谓的对象; 

      .数据结构为表现对象的特性而设计; 

      .函数作为对某个对象数据的操作,与数据结构紧密的结合在一起; 

      .数据被隐藏起来,不能为外部函数访问; 

      .对象之间可以通过函数沟通; 

      .新的数据和函数可以在需要的时候轻而易举的添加进来; 

      .在程序设计过程中遵循由下至上(bottom-up)的设计方法。 

      面向对象程序设计在程序设计模式中是一个新的概念,对于不同的人可能意味着不同的内容。我们对面向对象程序设计的定义是"面向对象程序设计是一种方法,这种方法为数据和函数提供共同的独立内存空间,这些数据和函数可以作为模板以便在需要时创建类似模块的拷贝。这样的程序设计方法称为面向对象程序设计。" 

      从以上定义可以看到,一个对象被认为是计算机内存中的一个独立区间,在这个区间中保存着数据和能够访问数据的一组操作。因为内存区间是相互独立的,所以对象可以不经修改就应用于多个不同的程序中。 

       什么是面向对象程序设计? 

      面向对象程序设计(OOP)技术汲取了结构化程序设计中好的思想,并将这些思想与一些新的、强大的理念相结合,从而给你的程序设计工作提供了一种全新的方法。通常,在面向对象的程序设计风格中,你会将一个问题分解为一些相互关联的子集,每个子集内部都包含了相关的数据和函数。同时,你会以某种方式将这些子集分为不同等级,而一个对象就是已定义的某个类型的变量。当你定义了一个对象,你就隐含的创建了一个新的数据类型。 

       对象 

      在一个面向对象的系统中,对象是运行期的基本实体。它可以用来表示一个人或者说一个银行帐户,一张数据表格,或者其它什么需要被程序处理的东西。它也可以用来表示用户定义的数据,例如一个向量,时间或者列表。在面向对象程序设计中,问题的分析一般以对象及对象间的自然联系为依据。如前所述,对象在内存中占有一定空间,并且具有一个与之关联的地址,就像Pascal中的record和 C中的结构一样。 

      当一个程序运行时,对象之间通过互发消息来相互作用。例如,程序中包含一个"customer"对象和一个 "account"对象,而customer对象可能会向account对象发送一个消息,查询其银行帐目。每个对象都包含数据以及操作这些数据的代码。即使不了解彼此的数据和代码的细节,对象之间依然可以相互作用,所要了解的只是对象能够接受的消息的类型,以及对象返回的响应的类型,虽然不同的人会以不同的方法实现它们。 

       类 

      我们刚才提到,对象包含数据以及操作这些数据的代码。一个对象所包含的所有数据和代码可以通过类来构成一个用户定义的数据类型。事实上,对象就是类类型(class type)的变量。一旦定义了一个类,我们就可以创建这个类的多个对象,每个对象与一组数据相关,而这组数据的类型在类中定义。因此,一个类就是具有相同类型的对象的抽象。例如,芒果、苹果和桔子都是fruit类的对象。类是用户定义的数据类型,但在一个程序设计语言中,它和内建的数据类型行为相同。比如创建一个类对象的语法和创建一个整数对象的语法一模一样。 

       数据抽象和封装 

      把数据和函数包装在一个单独的单元(称为类)的行为称为封装。数据封装是类的最典型特点。数据不能被外界访问,只能被封装在同一个类中的函数访问。这些函数提供了对象数据和程序之间的接口。避免数据被程序直接访问的概念被称为"数据隐藏"。 

      抽象指仅表现核心的特性而不描述背景细节的行为。类使用了抽象的概念,并且被定义为一系列抽象的属性如尺寸、重量和价格,以及操作这些属性的函数。类封装了将要被创建的对象的所有核心属性。因为类使用了数据抽象的概念,所以它们被称为抽象数据类型(ADT)。 

      封装 


      封装机制将数据和代码捆绑到一起,避免了外界的干扰和不确定性。它同样允许创建对象。简单的说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。 

      在一个对象内部,某些代码和(或)某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。 

       继承 

      继承是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。例如,知更鸟属于飞鸟类,也属于鸟类。这种分类的原则是,每一个子类都具有父类的公共特性。 

      在 OOP中,继承的概念很好的支持了代码的重用性(reusability),也就是说,我们可以向一个已经存在的类中添加新的特性,而不必改变这个类。这可以通过从这个已存在的类派生一个新类来实现。这个新的类将具有原来那个类的特性,以及新的特性。而继承机制的魅力和强大就在于它允许程序员利用已经存在的类(接近需要,而不是完全符合需要的类),并且可以以某种方式修改这个类,而不会影响其它的东西。 

      注意,每个子类只定义那些这个类所特有的特性。而如果没有按级分类,每类都必须显式的定义它所有的特性。 

       多态 

      多态是OOP的另一个重要概念。多态的意思是事物具有不同形式的能力。举个例子,对于不同的实例,某个操作可能会有不同的行为。这个行为依赖于所要操作数据的类型。比如说加法操作,如果操作的数据是数,它对两个数求和。如果操作的数据是字符串,则它将连接两个字符串。 

      多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。多态在实现继承的过程中被广泛应用。 

      面向对象程序设计语言支持多态,术语称之为"on e interface multiple method(一个接口,多个实现)"。简单来说,多态机制允许通过相同的接口引发一组相关但不相同的动作,通过这种方式,可以减少代码的复杂度。在某个特定的情况下应该作出怎样的动作,这由编译器决定,而不需要程序员手工干预。 

      在多函数程序中,许多重要的数据被声明为全局变量,这样它们才可以被所有的函数访问。每个函数又可以具有它自己的局部变量。全局变量很容易被某个函数不经意之间改变。而在一个大程序中,很难分辨每个函数都使用了哪些变量。如果我们需要修改某个外部数据的结构,我们就要修改所有访问这个数据的函数。这很容易导致bug的产生。 

      在结构化程序设计中,另一个严重的缺陷是不能很好的模拟真实世界的问题。这是因为函数都是面向过程的,而不是真正的对应于问题中的各个元素。 

       面向过程的程序设计的一些特点如下  

      .强调做(算法); 

      .大程序被分隔为许多小程序,这些小程序称为函数; 

      .大多数函数共享全局数据; 

      .数据开放的由一个函数流向另一个函数。函数把数据从一种形式转换为另一种形式。 

      采用由上至下的程序设计方法。 

       动态绑定 

      绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定的意思是,与给定的过程调用相关联的代码只有在运行期才可知。它与多态和继承的联系极为紧密。一个多态引用的函数调用决定于这个引用的动态类型。 

       消息传递 

      一个面向对象的程序由许多对象组成,这些对象之间需要相互沟通。因此,在面向对象程序设计语言中,程序设计的主要步骤如下: 

      1、创建类,这些类定义了对象及其行为; 

      2、由类定义创建对象; 

      3、建立对象之间的通讯。 

      对象之间通过收发信息相互沟通,这一点类似于人与人之间的信息传递。信息传递的概念使得真实世界的直接模拟更易于和建立系统交流。 

      对于某个特定对象来说,消息就是请求执行某个过程,因此,消息的接收对象会调用一个函数(过程),以产生预期的结果。传递的消息的内容包括接收消息的对象的名字,需要调用的函数的名字,以及必要的信息。 

      对象就有一个生命周期。它们可以被创建和销毁。只要对象正处于其生存期,就可以与其进行通讯。 

       OOP的优点 

      OOP具有许多优点,无论是对于程序设计者或者用户来说都是如此。面向对象为软件产品扩展和质量保证中的许多问题提供了解决办法。这项技术能够大大提高程序员的生产力,并可提高软件的质量以及降低其维护费用。其主要的优点陈列于下: 

      1、通过继承,我们可以大幅减少多余的代码,并扩展现有代码的用途; 

      2、我们可以在标准的模块上(这里所谓的"标准"指程序员之间彼此达成的协议)构建我们的程序,而不必一切从头开始。这可以减少软件开发时间并提高生产效率; 

      3、数据隐藏的概念帮助程序员们保护程序免受外部代码的侵袭; 

      4、允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰; 

      5、允许将问题空间中的对象直接映射到程序中; 

      6、基于对象的工程可以很容易的分割为独立的部分; 

      7、以数据为中心的设计方法允许我们抓住可实现模型的更多细节; 

      8、面向对象的系统很容易从小到大逐步升级; 

      9、对象间通讯所使用的消息传递技术与外部系统接口部分的描述更简单; 

      10、更便于控制软件复杂度。 

      当需要将以上所说的所有特性有机的结合于一个面向对象系统中,它们之间的相对重要性就取决于工程的类型和程序员的喜好。为了获得上述的某些优势,必须考虑很多事情。例如,对象库必须可以被重用。技术还在不停的发展,现有的产品也会很快的更新换代。如果重用没有能够实现,那么就需要进行严格的控制和管理。 

      易于使用的开发软件往往难以编写。面向对象程序设计工具有望解决这个问题。 

       面向对象程序设计语言 

      面向对象技术并不是某个特定语言的特权。如同结构化程序设计一样,OOP概念可以在很多语言比如C和Pascal中实现。但是,当程序越来越大时,程序设计工作会变得拙劣而混乱。而一个支持OOP概念的程序设计语言则可以让一切变得简单。 

      一个语言必须支持几个主要的OOP概念才能称其是面向对象的。根据所支持的OOP特性,语言可以分为以下两类: 

      1、基于对象的程序设计语言; 

      2、面向对象的程序设计语言。 

      基于对象的程序设计语言仅支持封装和对象辨识。 

      一个面向对象的程序设计语言所要支持的重要特性如下: 

      .数据封装 

      .数据隐藏和访问机制 

      .对象的自动初始化和清除 

      .操作符重载 

      支持对象风格程序设计的语言称为基于对象的程序设计语言。它们不支持继承和动态绑定。 

      Ada就是一个典型的基于对象的程序设计语言。 

      面向对象的程序设计不仅仅包含基于对象程序设计的特性,还支持继承和动态绑定。 

      OOP的应用 

       OOP最有前途的应用领域如下 : 

      1、实时系统; 

      2、仿真和建模; 

      3、面相对象数据库; 

      4、超文本、超媒体和扩展文本; 

      5、AI和专家系统; 

      6、神经网络和并行程序设计; 

      7、决策支持和 办公 自动化系统; 

      8、CIM/CAM/CAD系统。 

      Via 

      业务逻辑比较简单的适合用面向过程,例如统计当前在线用户数,一条SQL语句就可以搞定的没有多大必要用面向对象,也没有必要用什么设计模式,那样就是简单问题复杂化了。 

      业务逻辑比较复杂的适合用面向对象,这样当需求有变化时,维护起来会比较方便。 

      面向对象的局部是面向过程的,比如某个类里面某个方法里面实际就是面向过程的,而面向过程会借用面向对象的一些优点来进行优化。 

       网上发现了一篇文章,说了一下OP与OO的不同,并且打了一个比喻,通俗易懂。 

      有人这么形容OP和OO的不同:用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。我觉得这个比喻还是比较贴切的。 

      蛋炒饭制作的细节,我不太清楚,因为我没当过厨师,也不会做饭,但最后的一道工序肯定是把米饭和鸡蛋混在一起炒匀。盖浇饭呢,则是把米饭和盖菜分别做好,你如果要一份红烧肉盖饭呢,就给你浇一份红烧肉;如果要一份青椒土豆盖浇饭,就给浇一份青椒土豆丝。 

      蛋炒饭的好处就是入味均匀,吃起来香。如果恰巧你不爱吃鸡蛋,只爱吃青菜的话,那么唯一的办法就是全部倒掉,重新做一份青菜炒饭了。盖浇饭就没这么多麻烦,你只需要把上面的盖菜拨掉,更换一份盖菜就可以了。盖浇饭的缺点是入味不均,可能没有蛋炒饭那么香。 

      到底是蛋炒饭好还是盖浇饭好呢?其实这类问题都很难回答,非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。如果大家都不是美食家,没那么多讲究,那么从饭馆角度来讲的话,做盖浇饭显然比蛋炒饭更有优势,他可以组合出来任意多的组合,而且不会浪费。 

      盖浇饭的好处就是"菜""饭"分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是"可维护性"比较好,"饭" 和"菜"的耦合度比较低。蛋炒饭将"蛋""饭"搅和在一起,想换"蛋""饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。
    展开全文
  • 关系数据库系统与面向对象数据库系统各自的优缺点 关系数据库系统的优点 a.灵活性和建库的简单性:目前在多数RDDMS产品中使用标准查询语言SQL,允许用户几乎毫无差别地从一个产品到另一个产品存取信息。 b....
  • 软件开发模型和优缺点

    万次阅读 2018-04-05 16:30:27
    因此复用性更高 喷泉模型(Fountain-Model) 以用户需求为动力,以对象为驱动的模型,主要用于采用对象技术的软件开发项目 喷泉模型与传统的结构生存期比较,具有更多的增量和迭代性质,生存期的各个阶段可以相互...
  • 机器视觉Halcon与Vison pro 的优缺点

    千次阅读 2020-09-08 11:38:45
    在北美,经过工厂培训的分销商(例如我们)(JMAK自动)是第一线的支持,然后依靠位于美国和德国的专业支持工程师团队。今天通过远程登录通过Internet支持软件产品使支持位置变得微不足道。HALCON是一个非常大的...
  • 块/文件/对象三种存储的优缺点

    千次阅读 2019-09-27 19:04:36
    从应用角度看块/文件/对象三种存储:http://www.talkwithtrend.com/Article/178247 对象存储从理论到实践:...对象存储、文件存储、块存储,从应用角度看有何不同?“狠角色”们是怎么搭配的?:h...
  • mongodb数据库优缺点分析(扫盲)

    千次阅读 2019-07-15 09:26:07
    管理及专业性等问题时,应优先考虑关系型数据库。 3.MySQL和MongoDB之间最基本的区别是什么? 关系型数据库与非关系型数据库的区别,即数据存储结构的不同。 4.MongoDB的特点是什么? (1)面向文档(2)高...
  • 四、应用中的优缺点比较  (一) 主成分分析  1、优点首先它利用降维技术用少数几个综合变量来代替原始多个变量,这些综合变量集中了原始变量的大部分信息。其次它通过计算综合主成分函数得分,对客观经济现象...
  • 面向对象技术需要一定的训练时间:有面向对象系统开发经验的公司的专业人员认为,要成功地开发这种系统的关键是正规的训练,训练之所以重要是由于面向对象数据库的开发是从关系数据库和功能分解方法转化而来的,人们...
  • 众所周知C/C++、Java、Python都是主流的后端开发语言,并且不同的语言,具备不同的优缺点以及就业方向。解析来小编带你一起看看C/C++的优缺点以及就业方向: 深入解析C/C++的优缺点以及就业方向 C语言是很多语言的...
  • 1、单体架构  单体架构也称之为单体系统或者是单体应用。...单体架构的优点、缺点  优点:  项目易于管理  部署简单  缺点:  测试成本高  可伸缩性差  可靠性差  迭代困难  跨语言程度差  团队协作难 2...
  • 专业术语 sds:simple dynamic string 简单动态字符串 embstr:embedded sds string embstr编码的sds Redis 对象结构 Redis 五种对象类型 每一个redis对象都用一个key进行存储,在redis对象中有对象类型和编码,...
  • 面向过程 优点:性能比面向对象高,因为类调用时需要实例,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 缺点:没有面向对象易维护、易复用、易...
  • Python是世界上最受欢迎的编码语言之一,在80年代后期首次受到ABC和Modula-3语言的影响而被概念。从1991年的第一个版本到成为开源项目的2.0版本,它已经走了很长一段路,直到今天,它正在聚集一个庞大且专业的社区...
  • 图形开发(一)——Three.js基本介绍-优缺点-在线编辑器 & Babylon.JS是最好的JavaScript3D游戏引擎 课程主要学习目标 Threejs ( 3d ) D3 (做数据可视,echarts) 未来前端发展的三个方向 主流前端...
  • django的优缺点总结 - Python Web开发面试必备

    万次阅读 多人点赞 2018-06-20 21:39:03
    如果你以后想从事python web开发工作,就必需了解其优缺点。这些都可能会是你将来的面试题哦。 Django的优点 功能完善、要素齐全:自带大量常用工具和框架(比如分页,auth,权限管理), 适合快速开发企业...
  • 模糊层次综合分析法Python实践及相关优缺点分析

    万次阅读 多人点赞 2020-09-08 21:20:48
    我们先看模糊综合评价数据表,这是专家(或其他统计方式)对评价打分表投票表决结果统计数据,简单的说就是对需要评价的因素(指标)给出主管或客观的“、良、一般、较差、非常差”评价。这样,我们能给企业什么样...
  • 各种媒体的优缺点分析()

    千次阅读 2020-12-24 08:22:56
    各种广告媒体的优缺点分析一、报纸在传统四大媒体中,报纸无疑是最多、普及性最广和影响力最大的媒体。报纸广告几乎是伴随着报纸的创刊而诞生的。随着时代的发展,报纸的品种越来越多,内容越来越丰富,版式更灵活,...
  • 说说优缺点?以下软件几乎都只有PC/工作站版本。(没有手机APP版本。)都是商业软件,授权费用高昂!并且都是国外出品的软件! 1、After Effects优点:Adobe出品,大公司质量保证。和Adobe的全家桶交互好。提供:...
  • MFC和Qt优缺点

    千次阅读 2015-08-26 10:15:00
    我并非一个职业作家,这篇文章可能看起来不如专业的杂志和网站上的那么条理清晰。但是,我在这里是用我自己的语言来表达我自己的经验,希望能和你分享。英语比不是我的母语,所以可能会有一些用词古怪,词句错误之处...
  • 2、结构式语言:结构式语言的显著特点是代码及数据的分隔,即程序的各个部分除了必要的信息交流外彼此独立。这种结构方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数...
  • 前后端分离的优缺点

    万次阅读 多人点赞 2019-06-17 22:00:59
        大公司需要专业人才,小公司需要全才,但是对于个人职业发展来说,我建议分开。 对于后端Java工程师:     把精力放在Java基础,设计原理,jvm原理,spring+springMVC 原理及源码,linux,mysql...
  • SAS与R优缺点讨论:从工业界到学界

    千次阅读 2019-07-13 11:52:00
    本文就在我们学院碰到的一些共同误解的地方在此对比列出两种语言的优缺点。当然还有更多的争论在进行中但是本文汇中我们将选取最为普遍的来进行讨论。我们希望能够消除误解并且尽可能地为那些不能及时跟进R或SAS的...
  • MongoDB 是由C++语言编写的,是一个...查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 内存映射文件(Memory-mapped file): 是一段...
  • Python与其他语言相比优缺点 python零基础入门 python作为一门高级编程语言,它的诞生虽然很偶然,但是它得到程序员的喜爱却是必然之路,以下是Python与其他编程语言的优缺点对比: 1.Python 优势:简单易学,...
  • 前端项目中可以加入mock测试(构造虚拟测试对象来模拟后端,可以独立开发和测试),后端需要有详细的测试用例,保证服务的可用性与稳定性。 十、总结 前后端分离并非仅仅只是一种开发模式,而是一种架构模式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,181
精华内容 8,072
热门标签
关键字:

对象专业化有缺点