Atitit.prototype-base class-based 基于“类” vs 基于“原型”
Atitit.prototype-base class-based 基于“类” vs 基于“原型”
2. 对象的产生有两种基本方式。一种是以原型(prototype)对象为基础产生新的对象。一种是以类(class)为基础产生新对象1
3. 基于类(class-based),基于原型(prototype-based)和基于元类(metaclass-based)的对象模型2
4. 基于类(class-based)基于原型(prototyped-based)之分,两者什么差别..2
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 基于“原型”的更多相关文章
- 基于类和基于函数的python多线程样例
不断的练,加深记忆吧. #!/usr/bin/env python # -*- coding: utf-8 -*- import threading import time exitFlag = 0 ...
- Django 1.6 基于类的通用视图
Django 1.6 基于类的通用视图 最初 django 的视图都是用函数实现的,后来开发出一些通用视图函数,以取代某些常见的重复性代码.通用视图就像是一些封装好的处理器,使用它们的时候只须要给出特 ...
- 基于类(Java)和基于原理(JavaScript)的对象系统的比较
Java:面向对象编程语言,吸收了C++语言的各种优点,丢掉了C++让人头疼的多继承.指针等概念.具有功能强大和简单易用的两大特征.Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移 ...
- django-rest-framework之基于类的视图
前言:上一篇博客中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装饰器.同时,我们还介绍了APIView这个类,但是还没使用它 ...
- django 中基于类的视图
django 视图 分为两种: 1. FBV 基于函数的视图 function based view 2. CBV 基于类的视图 class based ...
- 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 ...
- 介绍——基于类的视图(class-based view)
刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...
- Django——基于类的视图源码分析 一
基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...
- Django——基于类的视图源码分析 二
源码分析 抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图 ...
随机推荐
- Maven:程序包org.apache.log4j不存在问题处理
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...
- 使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历
使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇 ...
- Linux(CentOS)下的vsftpd服务器配置-五岳之巅
说明:VSFTPD这款软件,网上和书里有很多配置文章,但不一定适用于您的主机,不同版本默认值不一样,我现在使用的是vsftpd-2.0.5-12.el5_3.1.千万记住:修改配置文件后,必须重新启动 ...
- iOS:分页控件UIPageControl的使用
分页控件:UIPageControl 功能:通常搭配滚动视图一起使用,设置pagingEnabled=YES即可,UIScrollView会被分割成多个独立页面,用户的滚动体验则变成了页面翻转,一 ...
- java map 分析
java 8 对HashMap进行了优化, 当碰撞时使用TreeNode的二分方法查找数据: 但是当数据碰撞厉害的时候, table有很多浪费. table 大小等于size/factor, 当碰撞很 ...
- centos6.8服务器配置之vsftpd配置
vsftpd: version 2.2.2一.安装:因对版本要求不高,所以采用yum安装 yum install -y vsftpdckconfig vsftpd on 二.配置: 1.建立ftp用户 ...
- 7个高级技巧帮助你释放大量Mac OS X硬盘空间
7个高级技巧帮助你释放大量Mac OS X硬盘空间 https://blog.csdn.net/hu434587115/article/details/72874811/
- 转:java中数组与List相互转换的方法
1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public <T> T[] toArray(T[] ...
- Python将一个大文件按段落分隔为多个小文件的简单方法
今天帮同学处理一点语料. 语料文件有点大,而且是以连续两个换行符作为段落标志,他想把它按段落分隔成多个小文件.即每3个段落组成一个新文件.因为曾经没有遇到过类似的操作,在网上找了一些类似的方法,看起来 ...
- 数学之路-分布式计算-linux/unix技术基础(4)
pwd显示当前文件夹,ls查看文件夹下的文件,cd 进入文件夹 -bash-4.2$ pwd /home/myhaspl-bash-4.2$ lsabc hadoop-2.4.1 ...