Atitit.prototype-base class-based  基于“类” vs 基于“原型”

1. 基于“类” vs 基于“原型”1

2.  对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象1

3. 基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型2

4. 基于类(class-based)基于原型(prototyped-based)之分,两者什么差别..2

5. 原型对象: 原型对象的工作原理:3

6. ref3

1.  基于“类” vs 基于“原型”

面向对象编程(Object Oriented Programming)只是一种编程范型(Programming Paradigm),其核心概念是“对象”(Object)。
在这一编程范型之下存在多种不同的风格(Style)。
Smalltalk、C++、JAVA、C# 之类的面向对象编程语言称之为 Class-based OOP Language (基于“类”的面向对象编程语言),而如 NewtonScript、Self、Javascript 之类的语言则称之为 Prototype-based OOP Language (基于“原型”的面向对象编程语言)。

他们都属于面向对象编程语言,区别在于风格不同。除了这两种风格,我记得在论文里还看到过其他风格

基于原型的编程语言在一些领域会非常方便,NewtonScript 当初发表的论文就是应用于苹果早期的“平板”电脑 Newton 之上的,主要用于 UI 部分的编码。作者认为相比于基于类的编程语言,更灵活而且更方便。
关于方便性方面我不想灌输概念,因为这比较主观,容易引起争议。
两种编程风格并无优劣高下之分,主要的差别在于思想和应用领域。建议灵活取舍。

作者::  ★(attilax)>>>   绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

2.  对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象

3. 基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型

而在一种所有皆对象的世界观背景下,在类模型基础上还诞生出了一种拥有元类(metaclass)的新对象模型。即类本身也是一种其他类的对象。以上三种根本不同的观点各自定义了三种基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型

4. 基于类(class-based)基于原型(prototyped-based)之分,两者什么差别..

 

Prototype Based Programming In a class-based language (like JavaLanguage or SmalltalkLanguage), every object is an instance of a class.

基于类型的语言                                        基于原型的语言

1.类型和实例是不相同                               所有的对象都是实例
2.以类型定义定义类;以构造函数实例化         定义和创建一组带有构造函数的对象
3.用new运算符创建一个简单对象                相同
4.通过使用类型定义去定义存在类型的子类     以赋值一个对象带有构造函数作为的原型来构建对象层次
来构建对象的层次
5.通过类型链继承属性                                通过原型链继承属性
6.类型定义指定了一个类型的所有实例的所    构造函数或者原型指定了一组初始的属性.可以对一个对象或者一组对象动态的增加和删除属性。
有属性.不能在运行时动态增加属性

5. 原型对象: 原型对象的工作原理:

每个对象都有一个参考对象,这个参考对象称之为原型对象。原型对象有自己的属性和方法。当A是B的原型对象时,那 么B拥有A中的所有属性和方法。

原型对象的工作原理:

使用原型对象定义一个新的对象时,该对象不会立即拥有原型对象的属性和方法,在调用的时候本对象内部没有的属性和方法是才回去调用原型中的属性和方法。(动态分配).

6. ref

基于原型的语言与基于类型的语言 - zengwh的专栏 - 博客频道 - CSDN.NET.html

Atitit.prototype-base class-based  基于“类” vs 基于“原型”的更多相关文章

  1. 基于类和基于函数的python多线程样例

    不断的练,加深记忆吧. #!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time exitFlag = 0 ...

  2. Django 1.6 基于类的通用视图

    Django 1.6 基于类的通用视图 最初 django 的视图都是用函数实现的,后来开发出一些通用视图函数,以取代某些常见的重复性代码.通用视图就像是一些封装好的处理器,使用它们的时候只须要给出特 ...

  3. 基于类(Java)和基于原理(JavaScript)的对象系统的比较

    Java:面向对象编程语言,吸收了C++语言的各种优点,丢掉了C++让人头疼的多继承.指针等概念.具有功能强大和简单易用的两大特征.Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移 ...

  4. django-rest-framework之基于类的视图

    前言:上一篇博客中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装饰器.同时,我们还介绍了APIView这个类,但是还没使用它 ...

  5. django 中基于类的视图

    django 视图 分为两种: 1.  FBV  基于函数的视图      function   based  view 2.  CBV  基于类的视图         class   based  ...

  6. Django入门与实践-第22章:基于类的视图

    http://127.0.0.1:8000/boards/1/topics/2/posts/2/edit/ http://127.0.0.1:8000/ #boards/views.py from d ...

  7. 介绍——基于类的视图(class-based view)

    ​刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...

  8. Django——基于类的视图源码分析 一

    基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...

  9. Django——基于类的视图源码分析 二

    源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...

随机推荐

  1. POJ 2187 Beauty Contest (求最远点对,凸包+旋转卡壳)

    Beauty Contest Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 24283   Accepted: 7420 D ...

  2. selector简介

    最近在学习java NIO,发现java nio selector 相对 channel ,buffer 这两个概念是比较难理解的 ,把学习理解的东西以文字的东西记录下来,就像从内存落地到硬盘,把内存 ...

  3. 通过logstash收集mysql慢查询日志转换为json

    input { file { type => "mysql-slow" path => "/var/log/slow_mysqld.log" sta ...

  4. px、em、rem的区别

    一.PX: px像素(Pixel):相对长度单位.像素px是相对于显示器屏幕分辨率而言的. PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用 ...

  5. Java自定义注解Annotation详解

    注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去 ...

  6. IntelliJ IDEA 创建 java Maven项目

    1.下载安装Maven 下载官网:http://maven.apache.org/download.cgi 下载解压到当前目录并建立LocalWarehouse文件夹,该文件夹为自己的文件仓库做存储. ...

  7. spring的条件装配bean

    1 应用程序环境的迁移 问题: 开发软件时,有一个很大的挑战,就是将应用程序从一个环境迁移到另一个环境. 例如,开发环境中很多方式的处理并不适合生产环境,迁移后需要修改,这个过程可能会莫名的出现很多b ...

  8. HDU4667(有错)

    正规的做法是找切点.三角形三个顶点分别对圆作切线,然后求切点(2个).两圆之间也要求切点(4个). 扯淡了这就..麻烦的要命.. 下面是写了一半的代码.. void process_circle(po ...

  9. 【转】dependency injection 的例子

    Dependency Injection in PHP. Create your own DI container. / blog / PHP By my opinion one of the big ...

  10. redis学习笔记——初始化

    初始化服务器状态结构 redis中一个最重要的数据结构是redis_server,会创建一个这个结构的全局变量server,初始化服务器的第一步就是创建一个struct redisServer类型的实 ...