前言 在之前的名字.作用域那篇提到模块类型,它使程序员可以从一个给定抽象出发,通过实例化产生多个实例:再后面是类,它使程序员可以定义一族相关的抽象. 在这一篇里,我们会来看一下面向对象程序设计及其三个基本概念.动态方法约束.多重继承等等 面向对象程序设计 随着软件变得越来越复杂,数据抽象已经变成了软件工程中最重要的部分.由模块和模块类型提供的这种抽象至少带来了如下三个好处: 它可以减少程序员必须同时考虑的细节量,减少了人的概念负担 它起到一种故障遏制作用,可以防止程序员以不适当的方式使用程序的各…
前言 这两篇写了词法分析和语法分析,比较偏向实践.这一篇来看一下语言设计里一个比较重要的部分:名字.在大部分语言里,名字就是标识符,如果从抽象层面来看名字就是对更低一级的内存之类的概念的一层抽象.但是名字还有其它相关的比如它的约束时间和生存周期等等 约束时间 约束就是两个东西之间的一种关联,例如一个名字和它所命名的事物,约束时间就是指创建约束的时间.有关的约束可以在许多不同的时间作出 语言设计时 语言实现时 编写程序时 编译时 链接时 装入时 运行时 这就是为什么基于编译的语言实现通常会比基于解…
前言 对大多数计算模型而言,顺序都是基本的东西,它确定了为完成所期望的某种工作,什么事情应该最先做,什么事应该随后做,我们可以将语言规定顺序的机制分为几个类别: 顺序执行 选择 迭代 过程抽象 递归 并发 异常处理和推断 非确定性 对于不同类别的语言对不同类别的控制流的重要性也不尽相同,比如顺序执行相比于函数式对于命令式则更加重要.而命令式中更倾向用迭代,函数则更强调递归 表达式求值 在讨论控制流之前先讨论下表达式的问题,先明确两个概念:运算符通常是指那些采用特殊语法形式的内部函数(比如+-*/…
前言 断断续续学编译原理到之前发过写一个编译器和正则表达式引擎系列文章也有一段时间了,然后最近看完PLP这本书,这本书应该算是入门书,但是对我这种半吊子收获很大.所以为了弥补最近学操作系统和接外包摸的鱼,就想写写看完这本书的收获.(为拙劣的标题道歉 程序设计语言的谱系 现在的新语言都是一撮一撮的出来,但是基本都可以用他们的计算模型来分成两类,一类是更关心计算机做什么的说明式,一类是更关心计算机怎么做的命令式 一般认为像函数式逻辑式语言都算是说明式,而冯诺依曼式和面向对象的都被认为是命令式 函数式…
前言 现在大多数程序设计语言中都有表达式和/或对象的类型概念.类型起着两种主要作用: 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文.比如int类型的两个对象相加就是整数相加.两个字符串类型的对象相加就是拼接字符串.在Java和C#中new object()隐含在背后的就是要分配内存返回对象的引用等等. 类型描述了其对象上一些合法的可以执行的操作集合.类型系统将不允许程序员去做一个字符和一个记录的加法.编译器可以使用这个合法的集合进行错误检查,好的类型系统能够…
前言 在之前我们把抽象定义为一种过程,程序员可以通过它将一个名字与一段可能很复杂的程序片段关联起来.抽象最大的意义就在于,我们可以从功能和用途的角度来考虑它,而不是实现. 在大多数程序设计语言中,子程序是最主要的控制抽象的方法.大多数子程序都是参数化的,即通过传递一些参数来影响子程序的行为. 回顾栈的布局 当一个子程序被调用的时候,在栈的顶部将给它一个新的栈帧或称为活动记录.这个栈帧可能包含实际参数和/或返回值.簿记信息(包含返回地址和保存的寄存器).局部变量和/或各种临时量.当子程序返回时,栈…
前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语言不一样,计算机语言必须是精确的,它们的语法和语义都必须保证没有歧义,这当然也让语法分析更加简单 所以对于编译器一项很重要的任务就是时别程序设计语言的结构规则,要完成这个目标就需要两个要求: 完成对语法规则的描述 确定给定程序是否按照这些规则构造起来,也就是符合语法规则 第一个要求主要由正则表达式和…
前言 在之前几篇我们讨论的语法.语义.命名.类型和抽象适用于所有语言.然而我们的注意力都主要集中在命令式语言上,现在这篇来看看其它范式的语言.函数式和逻辑式语言是最主要的非命令式语言. 函数式语言 命名和作用域问题出现在各种模型中,还有类型.表达式和选择与递归等控制流概念等等.所有语言都必须经过扫描.语法分析和语义分析, 函数式程序设计的概念 函数式程序设计将一个程序的输出定义为其输入的一个数学函数,在其中没有内部状态的概念,因此也没有副作用.函数式提供了一下特征,其中许多都是命令式语言中没有的…
Python第七章__class面向对象高级用法与反射 欢迎加入Linux_Python学习群  群号:478616847 目录: Python中关于oop的常用术语 类的特殊方法 元类 反射 一.Python中关于oop的常用术语 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现这种模型.抽象不仅包括这种模型的数据属性, 还定义了这些数据的接口.对某种抽象的实现就是对此数据及与之相关接口的现实化(realization).现实…
知识点概览: 静态方法,类方法,属性方法 类的特殊方法 反射 异常处理 socket开发基础 一.静态方法:@staticmethod 只是名义上归类管理,实际上在静态方法里访问不了类或者实例中的任何属性.也可以说跟类没什么关系了,也就是截断了跟类的关联,实际上也就是一个函数而已.   实际场景就可以用它来做个工具包 #!/usr/bin/env python # -*- coding:utf-8 -*- class Dog(object): def __init__(self,name): s…
大纲 一.面向对象高级语法 1.静态方法.类方法.属性方法 2.类的特殊成员方法 3.反射 二.异常处理 三.网络编程之socket基础 一.面向对象高级语法 1.静态方法:名义上归类管理,实际上静态方法里访问不了类或者实例中的任何属性 # _*_ coding:utf-8 _*_ __author__ = "ZingP" class Dog(object): def __init__(self,name): self.name = name @staticmethod # 实际上跟类…
JS是一种完全面向对象的程序设计语言,在面向对象处理方面,具有多种多样的实现方式,加之对象成员的动态性使得这门语言更加灵活:而js对象成员动态性也是创建和扩展对象的有力方式. 1 对象成员动态性 属性动态性:对于没有该成员属性的对象,可以直接采用赋值操作增加属性, 方法动态性:与属性动态性一样 比如:var obj=new Object(); 属性动态性:obj.name='ffs'; 方法动态性:obj.myThoed=function(){console.log('我是动态扩展的方法')};…
主要讲面向对象的基本概念和一些概念,以及实现简单的面向对象C++程序. 类和对象 基本概念 类和对象是面向对象中的两个基本概念,类是指一类事物,是一个抽象的概念.对象是指某一个类的实体,是一个具体存在的事物. 类是一中模板,可以通过这种模板创建出不同的对象实例.对象实例是类模板的一个具体实现.一个类可以有很多个对象,而一个对象必然属于某个类. 类和对象的意义 类用于抽象的描述一类事物所特有的属性和行为.对象是一对一个特有的事物,拥有所属类的所有属性,并且每一个属性都有一个特有的值. 类之间的关系…
面向对象的类成员 相关知识点 一  字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类 class Province: # 静态字段 country = '中国' def __init__(self, name): # 普通字段 self.name = name # 直接访问普通字段 obj = Province('河北省') print obj.name # 直接访问静态字段 Province.country…
面向对象三大特性 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强... 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数 一.什么是类&对象 类:可以理解为他是一个模板…
16.封装查询结果对象 封装简单粗暴的理解就是:假设你在超市买苹果,买一个你可以一个手拿走,买两个你可以用两只手拿走,但是如果买了20个勒,咋办勒,那就用一个袋子装起来!这就 封装思想. 1.封装一个产品对象 Product.java package com.day01.station.model; /** * Created by Administrator on 2018/2/9. */ public class Product { /** * 类里面有三样 * 1.字段 * 2.构造方法…
面向对象编程 在python中,同样是类和对象作为重要的组成部分. 而且在python中基本数据类型如int都是有封装类的,都有自己的方法,应该是和java里面的Integer类似吧 类包括域和方法:域也就是类或对象中的变量,方法就是类里面声明的函数 self关键字: 相当于java中的this,下面是个例子: #!/usr/bin/python # Filename: method.py class Person: def sayHi(self): print 'Hello, how are…
类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用,特征被称为属性,行为被称为方法,类就相当于制造飞机时的图纸,是一个模板,是负责创建对象的. 对象是由类创建出来的一个具体存在,可以直接使用,由哪个类创建出来的对象,就拥有在那个类中定义的属性和方法,对象就相当于用图纸制造的飞机,在程序开发中,先有类,然后再有对象. 1.创建类和对象 #创建类:class为创建类的关键字,Dog为类名,self为方法的特殊参数,必填 class Dog: #类中定义的函数为方法 def eat…
一,类的属性 (1)示例 通过属性获取已经创建对象的个数 class Plane: pCount = 0 #类属性 def __init__(self,name,category): self.name = name self.category = category #实例属性 Plane.pCount += 1 print ('已生产,Plane.pCount,'架飞机') p1 = Plane('平安','播音777') print ('已生产',PlanepCount,'架飞机') #输出…
  三大特性: 1.封装:在类中对数据赋值.内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法 2.继承:一个类可以派生出子类,在父类中定义的属性.方法会自动被子类继承 # class People:#经典类 class People(object):#新式类 def __init__(self,,age): self.name = self.age = age   def eat(self): print('%s is eating' %self.name)  …
呵呵,作数据分析是数据监控后的动作. 思路是用监控系统产生数据, 如果监控本身提供统计最好,如果不提供,则可以用R来作分析统计和预测. 如果数据不符合规范,则用PYTHON进行处理转换. ~~~~~~~~~~~~~~…
extends 与Java一样,也是使用extends关键字,使用继承可以有效复用代码 class Person { private var name = "leo" def getName = name } class Student extends Person { private var score = "A" def getScore = score } defined class Person defined class Student scala>…
Java类的继承 类继承语法规则 < 修饰符> class < 子类名称> [extends < 父类>] { <属性和方法的声明> }  类的继承 子类继承了父类,就继承了父类的方法和属性.在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法.因而,子类通常比父类的功能更多.在Java中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”. 继承规则 Java只支持单继承,不允许多重继承一个子类只能有一个父类一个…
引子 编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力. 数据天生就是文静的,总想保持自己固有的本色:而代码却天生活泼,总想改变这个世界.    你看,数据代码间的关系与物质能量间的关系有着惊人的相似.数据也是有惯性的,如果没有代码来施加外力,她总保持自己原来的状态.而代码就象能量,他存在 的唯一目的,就是要努力改变数据原来的状态.在代码改变数据的同时,也会因为数据的抗拒而反过来影响或改变代码原有的趋势.甚至在某些情况下,数据可…
此为git命令详解的第七篇 这章我们可以来逐渐揭开 git push.fetch 和 pull 的神秘面纱了.我们会逐个介绍这几个命令,它们在理念上是非常相似的.   git push的参数 git fetch 的参数 git pull 参数 git push: 首先来看 git push.在远程跟踪课程中,你已经学到了 Git 是通过当前检出分支的属性来确定远程仓库以及要 push 的目的地的.这是未指定参数时的行为,我们可以为 push 指定参数,语法是: git push <remote>…
激励自己有时间多看看.!! C#基础共分为七个部分: 一: 面向对象 二: 值类型, 引用类型, 字符串操作 三: 集合文件操作 四: 正则表达式 五: XML操作 六: 委托, 事件 七: 反射 1, 面向对象: 面向对象的三大特性: 封装, 继承, 多态 2, 什么是类? 什么是对象? 类和对象的区别? 类: 类似模子, 确定对象将会拥有的特征(属性) 和行为 (方法) 对象是一个你能够看得到, 摸得着的具体实现-- 万物皆对象. --类是模具, 创建对象的模具, 抽象的   .类是一组数据…
实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网 络"."问同…
  周末多码文,昨天晚上一篇,今天再来一篇: 在线编程:https://mybinder.org/v2/gh/lotapp/BaseCode/master 在线预览:http://github.lesschina.com/python/base/oop/3.异常相关.html 代码裤子:https://github.com/lotapp/BaseCode/tree/master/python/2.OOP/4.Exception 1.异常¶ 1.1 try...except¶ 又到了开新课的时候了…
面向对象编程 一.第一个案例---创建类 #__author:"吉" #date: 2018/10/27 0027 #function: # 设计类: ''' 1 类名:首字母大写,见名思意 2 属性:驼峰原则 3 行为:见名思意,驼峰法 说明:类不占空间,实例化对象占用空间! ''' # 格式,object是父类,超类 ''' 类名(object): 属性 行为 ''' class Peoson(object): name = 'zhanglei' age = 24 weight =…
20155228 实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计模式 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方…