面向对象

Lua面向对象

…衆ロ難τιáo~ 提交于 2020-01-25 03:13:16
一、认识lua中的面向对象编程 lua中的table就是一种对象,它和其它语言中的对象一样拥有一个独立于其值的标识(self); 使用self参数是所有面向对象语言的一个核心, 大多数面向对象语言都能对程序员隐藏部分self参数,从而使得程序员不必显式声明这个参数,Lua中使用冒号,则能隐藏self参数,冒号只是一种语法便利,并没有引入新的东西; 在一个函数中,我们往往不希望使用到全局变量而希望使用自定义局部变量以及传入的参数 ;观察注释部分,这里的Account使用的是外部变量,那么一旦在外部将Account置为nil,那么我们使用a.withdraw执行函数时就会出错;修改之后,我们使用self作为参数来传入函数内,Account:withdraw(v)等价于Account.withdraw(self.v) function Account:withdraw(v) --Account.balance=Account.balance-v --print (Account.balance) self.balance=self.balance-v print(self.balance) end local a=Account Account=nil a:withdraw(10) Lua冒号语法糖,隐藏了self参数,默认将自身作为函数的第一个参数传入;在调用时也可以显式传入该参数

了解Java程序之面向对象

怎甘沉沦 提交于 2020-01-24 01:10:29
面向对象 形式参数是引用类型和返回值是引用类型解析: 形式参数是基本类型对实际参数没有任何影响; 形式参数是引用类型: 具体类 :实际参数传递的是需要改具体类对象! 抽象类 :实际参数传递到的是需要改抽象类的子类对象 举例:jdk提供的Scanner类 构造方法 Scanner(InputStream source) public abstract class InputStream :抽象类 接口:实际参数需要传递的是该接口的子实现类的对象 举例: TreeSet 集合 public TreeSet(Comparator comparator) 构造方法中传递是一个接口类型:Comparato 接口 interface Work { void teach ( ) ; } //定义一个类 class TeacherDemo { public void function ( Work w ) { //形式参数是一个接口类型,需要传递该接口的子实现类对象 w . teach ( ) ; //Work w = new Teacher(); 接口多态的方式 } } //定义一个接口的子实现类 class Teacher implements Work { //重写teach(){} public void teach ( ) { System . out . println (

[Hello!Java!]1.我对Java的理解

廉价感情. 提交于 2020-01-23 18:22:07
Hello! Hello!Java!是本博客的第一个专栏。在选材的时候考虑了一小会,最后决定从Java,这个最最基本的语言入手,一步步和大家分享服务端研发的相关知识和技能。 计算机和软件系的学生在大三的时候会开始有倾向性地选择自己的主要语言。一般来说,Java是最多学生选择的语言。从全世界的从业及代码量来看,Java已经蝉联编程语言排行榜榜首多年。We are not alone but the most! Java是什么? Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 [1] 。 Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 [2] 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 以上内容引用自百科文档,我对此进行一次自己的解读。 1、Java是一门编程语言; 类比我们在用的汉语、英语、甚至手语等等,一个人要通过语言向外界传递信息,语言是一个信息的载体;但是,单有语言,是不足够的:还需要人的大脑去组织语言,人的嘴巴或手根据大脑的指令做出语言的表达,此外,还需要接收信息的人

JAVA 面向对象、类

半世苍凉 提交于 2020-01-22 21:55:56
面向过程 :c语言,开发中小型项目的效率很高。 面向对象 :Java或C++等语言,适合大型开发场景。 面向过程思想 :实现一个功能,看每个步骤怎么做,整体的过程是怎么样的。每一个步骤都需要自己亲力亲为。 面向对象思想 :实现一个功能,不看重具体的过程和步骤,关心“谁能帮我做这件事”。 面向对象三大特征:封装性,继承性,多态性。 举例一.把数组转换成指定格式字符串 public class Demo01PrintArry { public static void main ( String [ ] args ) { int [ ] array = { 10 , 20 , 30 , 40 , 50 } ; // 面向过程,每一个步骤细节都需要亲自处理 System . out . print ( "[" ) ; for ( int i = 0 ; i < array . length ; i ++ ) { if ( i == array . length - 1 ) { System . out . print ( array [ i ] + "]" ) ; } else { System . out . print ( array [ i ] + "," ) ; } } // 面向对象,JDK中有个工具Arrays,可将这个工具将数组转换为指定格式字符串 // 我自己不做

C++的那些事:面向对象

人盡茶涼 提交于 2020-01-22 20:56:10
1 OOP概述 面向对象基于三个基本概念:数据抽象、继承和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。 1.1 继承 继承是派生类与基类之间的关系,它们共享了一些公共的东西,而派生类特化了一些本质不同的东西。类与类之间的继承关系构成了继承层次。在C++中,基类必须指定希望派生类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,需要在派生类中继承的不能定义为虚函数。 派生类重新定义的虚函数前面可以加virtual,但这不是必要的,在C++11中,允许派生类显式地注明它将使用哪个成员函数改写基类虚函数,只用在该函数形式参数列表后增加一个override关键字。 1.2 动态绑定 当函数接口定义了基类的引用(或指针)时,在函数内调用虚函数时,发生动态绑定。因为这时候函数实参可以为基类类型也可以为派生类类型, 虚函数只有在运行阶段 才能确定需要调用哪个定义。 2 定义基类与派生类 2.1 定义基类 基类成员函数中希望在派生类中重新定义的函数前面加了virtual,这类函数在调用时,在程序运行阶段确定。任何构造函数之外的非静态函数都可以是虚函数。virtual关键字只需要在基类定义的时候加在需要重定义的函数前面,实现的时候不需要。

面向对象的精髓(JAVA,C++)

时间秒杀一切 提交于 2020-01-21 23:47:01
面向对象和面向过程的区别: 小时候学过pascal,跨专业自学过c语言,都是面向过程编程 而如今学的C++,python,java都是面向对象编程。 网上所云是 设计方式的不同 过程编程 :你可以看到解决问题的每一个步骤,每一个步骤可能都有千丝万缕的联系。 对象编程 :你仅仅能看到什么模块解决什么问题,模块之间相互独立,而怎么解决的具体过程,被黑盒化了。 虽然问题都被解决了,但是方式不同。 这样讲不通俗易懂:我认为的 对象 和 过程 的差别很 简单 : 1. 对象编程是复杂工程项目的衍生物 2. 极端点,对象编程是过程编程的优化 以前对象编程还没问世之前,那个时候的工程量还小,程序猿们用机器语言就可以解决问题,再后来,为了方便理解升级成了汇编语言,之后在发展有了c这种正常人能看得懂的语言,当时人脑对于处理几千行几万行代码还能承受,随之科技普及,项目复杂度增大时,代码的行数变为几十亿行时,人们渐渐力不从心,想办法如何能够将代码的可读性,可扩展性提高,在短时间内就可以理解清楚一个项目的逻辑,框架,于是面向对象就诞生了。 我是学工科的,其实这个趋势,第一次第二次工业革命就可见一斑,但凡一个东西一旦复杂化,就违背了我们人类使用的初衷,因为我们生来就是为了 偷懒 , 以前的匠人手工能做一件商品,后来机器去替代了手工。 汽车的目的是为了人们方便开车,我们不需要了解发动机的构造。

面向对象与面向过程

时光怂恿深爱的人放手 提交于 2020-01-21 01:58:18
面向过程:侧重于过程 ps:把大象关进冰箱需要几步: 1.开冰箱门 2.把大象装进冰箱 3.关冰箱门 面向对象:侧重于对象 ps:自己是上帝视角,创建一个大象,看着它自己把自己装进冰箱 二者优劣分析: 面向过程: 优点:编写比较简单 缺点:代码量大时,维护性差 面向对象: 优点:维护性好,可扩展性比较强 缺点:对于新手来说上手难度比较大 来源: https://www.cnblogs.com/hanhanstudy/p/12220050.html

从此重构

此生再无相见时 提交于 2020-01-19 03:27:01
设计是如此重要,那么开发者的基本设计能力与素质又从何下手来培养呢? 最好的办法,就是请个老师。从框架中了解,从系统中实现,从书文中汲取。然而,设计能力的提升绝非一朝一夕之功, 软件 开发中的设计大师,往往必须具备多年的修行方可称之为“架构师”。 一个在简历中轻描淡写的“ 10 年软件设计经验”,并非是所有软件人都能修炼成的真功夫,这里没有任何虚情假意可言。在一个项目的实现过程中,逐渐了解什么是对象、什么是对抽象 编程 、设计模式是如何应用在实际的系统架构、设计原则到底是什么秘密武器,而重要的是完成一个软件项目,对于更多人来说是认识一种软件开发的科学流程。这种体验,才是难能可贵的经验。在设计的广义概念里,几个必需的概念是应该首先被了解和认知的,以排名不分先后的原则罗列,它们大概包括: · 面向对象 ( Object-Oriented ),关于面向对象没有必要重复嚼舌了,本书的第 1 章“ OO 大智慧”中对 .NET 的面向对象进行了有别于其他专著的介绍,除了以实例突出面向对象之思想大成,还以浓墨铺陈了 .NET 是如何在底层 技术 上来实现继承、多态和接口映射等机制,从而使读者可以更加有效和深刻地把握面向对象之精髓。 · 面向服务 ( Service Oriented ), SO 至少是个时髦的话题, WCF 伴着 .NET 3.5 的发布,一个一统江湖的面向服务的基础架构横空出世

java和python真的有区别吗?

ⅰ亾dé卋堺 提交于 2020-01-18 19:17:47
Java和Python的特性区别! 这篇文章整合了java语言的特性和python语言的特性,希望可以帮到想要了解或初学编程的你! Python特性 Python是简单易学的: Python是一种代表简单主义思想的语言,它使你能够专注于解决问题而不是去搞明白语言本身。Python极其容易上手,因为Python有极其简单的说明文档。 Python是速度快的: Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。 Python是免费、开源的: Python是FLOSS(自由/开放源码软件)之一。使用者可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。FLOSS是基于一个团体分享知识的概念。 Python是高层语言: 用Python语言编写程序的时候无需考虑诸如如何管理你的程序使用的内存一类的底层细节。 Python是可移植的: 由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台 上)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、 BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation

Java基础_基础语法知识6

喜你入骨 提交于 2020-01-18 14:54:45
面向对象 1.面向对象编程中成员变量与局部变量 (1).一个面向对象中成员变量和局部变量的代码体现 public class Student { private int a; public void Test() { //int b; //System.out.println(b);//报错:需要初始化 int b; b=0; System.out.println(b); } } //上面的代码中定义了一个类,然后这一个类中有一个int类型的a; 同时还定义了一个名为Test()的方法,里面定义了一个名为b的局部变量; (2).成员变量和局部变量的区别 A:在类中的位置不同 成员变量:定义在类中方法的外面 局部变量:定义在方法内部或者是方法声明上 B:在内存中的位置不同 成员变量:栈内存 局部变量: 堆内存 C:生命周期不同 成员变量:随着对象的存在而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 D:初始化值不同 成员变量:有默认的初始化值(null,0) 局部变量:没有默认的初始化值,需要先定义,然后赋值,才可以使用。 //注意:成员变量和局部变量的名称可以一样吗? 可以,但是不建议这样写,访问的时候是先找小范围(局部变量),然后再找大范围。(成员变量) (3).形式参数的问题 A:基本类型 形式参数的改变不影响实际参数 B:引用类型