博舟科技面向对象编程思想设计入门指导

上传人:博****1 文档编号:489601817 上传时间:2023-05-20 格式:DOCX 页数:20 大小:37.48KB
返回 下载 相关 举报
博舟科技面向对象编程思想设计入门指导_第1页
第1页 / 共20页
博舟科技面向对象编程思想设计入门指导_第2页
第2页 / 共20页
博舟科技面向对象编程思想设计入门指导_第3页
第3页 / 共20页
博舟科技面向对象编程思想设计入门指导_第4页
第4页 / 共20页
博舟科技面向对象编程思想设计入门指导_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《博舟科技面向对象编程思想设计入门指导》由会员分享,可在线阅读,更多相关《博舟科技面向对象编程思想设计入门指导(20页珍藏版)》请在金锄头文库上搜索。

1、面向对象编程思想设计指导前言:整理这份资料的目的是为了帮助同事们能够更直观的理解面向对象的编程。让后来者能够少走一些弯路。但其中不免有许多漏洞及错误,也还请各位同事提出宝贵的更改意见,毕竟交流会让大家不断的携手进步。技术是日新月异的,他不会等待你的成长。技术要拿出来于别人交流,自己学是自己主观意识上的理解,有对有错!交流会让进步变得更快。我认为如果计算机的体系结构不发生革命性的变化,我们现在所应用的程序语言也就百变不离奇踪了!学编程学的是什么?思想!精通一门编程语言(最好是面向对象的语言)后再去搞其他的编程语言,你会发现过程是如此的行云流水!为什么?你已经把编程的思想掌握了,再去学其他的,无非

2、是学习一种新的语法格式了。我在这里并不是和你讨论怎么去用C+、JAVA、C#或Python,也不是和你讨论怎么去学他们,我要和你讨论的是怎么去理解面向对象。其中主要会涉及到“类、对象、继承、属性、方法、静态、重载、隐藏、重构、声明、定义、初始化、赋值等”其中有许多相关技术我只会一代而过,让你有一种到此一游的意味我就达到目的了,而更详细的技术内幕,就请参考其他相关书籍而深入研究吧!因为我只是在和你探讨如何去更好的理解面向对象!如何去提高效率?重复使用资源,把别人的东西拿来就用。这是很不错的主意!而对于你来说,最大的资源就是信心以及积极性!好,打起精神来,让我们一同到面向对象的编程中去寻幽访胜吧!

3、注:文章中所有程序实例我都使用JAVA或C#写的,当然在类C语言中(例如C+)中也就大同小异了了,不同的地方我会指出!1 基本概念1.1 类与对象初探无论是面向过程的语言也好,面向对象的语言也罢,我首先要给他讲的都是类和对象!我们来讨论一个古老的问题-“这个世界是由什么组成的?”这个问题如果让不同的人来回答会得到不同的答案。如果是一个化学家,他也许会告诉你“还用问嘛?这个世界是由分子、原子、离子等等的化学物质组成的”。如果是一个画家呢?他也许会告诉你,“这个世界是由不同的颜色所组成的”。角度不同,答案也不同!但如果让一个逻辑学家来考虑问题就有趣的多了,他会告诉你“这个世界是由不同类型的物与事所

4、构成的”好!作为面向对象的程序员来说,我们要站在逻辑学家的角度去考虑问题!是的,这个世界是由动物、植物等组成的。动物又分为单细胞动物、多细胞动物、哺乳动物等等,哺乳动物又分为人、大象、老虎就这样的分下去了!现在,站在抽象的角度,我们给“类”下个定义吧!从现实出发,站在抽象的角度,你回答我“什么是人类?”首先让我们来看看人类所具有的一些特征,这个特征包括属性(一些参数,数值)以及方法(一些行为,他能干什么!)。每个人都有身高、体重、性别、年龄、血型等等一些属性。人会劳动、人都会直立行走、人都会用自己的头脑去创造工具等等这些方法!人之所以能区别于其它类型的动物,是因为每个人都具有人这个“种属”的属

5、性与方法。“人类”(Human)只是一个抽象的概念,它仅仅是一个概念,它是不存在的实体!但是所有具备“人类”这个“种属”(Class)的属性与方法的对象都叫“一个人”(One Person)!这个对象“人”是实际存在的“实体”(Instance or Object)!每个人都是人这个群体的一个对象。老虎为什么不是人?因为它不具备人这个群体的属性与方法,老虎不会直立行走,不会使用高级工具,也不会用火等等!所以说老虎不是人!(Description)The Tiger is not Human -(C# Code) !tiger is Human)我们再来定义“类”-类描述了一组有相同特性(属性)

6、和相同行为(方法)的对象。在程序中,类实际上就是数据类型!例如:整数,小数等等。整数也有一组特性和行为。面向过程的语言与面相对象的语言的根本区别就在于:面向过程的语言不允许程序员自己定义数据类型,而只能使用程序中内置的数据类型!而为了模拟真实世界,为了更好的解决问题,往往我们需要创建解决问题所必需的数据类型(Data Type)!面向对象编程为程序员提供了使用计算机来描述世界的基础解决方案。(Coding is Creation,编程即创造)1.2 内置数据类型与函数根据经验,开发程序在存储数据时必须关注3个基本属性为:1信息存储在何处;(内存地址、指针)2存储的值是多少;(存储的字节组合)3

7、存储的信息是什么类型的;(数据结构)让我们来看看编程语言的内置数据类型都有哪些!(这个很难全面,因为每门语言都有自己独特的数据类型,但这毕竟是少数,比如在JAVA中有byte类型的数据,而在C+中就没有,希望大家能举一反三!)比如整数“int”,浮点类型的数据“float”!字符串“String”,以及数组还有结构体等等。然而在写程序的时候,根据需要我们会创建(定义或声明)一个类型的变量或常量,例如:由于我们需要创建一个整形的变量i为5,我们就可以这样做,int i = 5;而根据需要我很有可能改变i的值,也就是从新给它赋值,比如让它等与6,就可以在所需的地方改成i = 6;由此我们知道,在“

8、值”上可以发生变化的量就叫变量。不会发生变化的量就叫做常量了,在C+中用count关键字来声明,而在JAVA中则使用final关键字来声明,C#中是const。由于不同语言的声明格式不一样,这里就不做一一介绍了,详细的内容清查阅相关书籍!我们再分析一下程序中的函数(请暂时忘记代数和解析几何)。我们可以把函数想象成一个“实现某种特定功能的黑箱”-这个功能是由你来设定的,举个例子来说:现在我问你“2*3等于多少”?我相信你能很快的回答我等于6。让我们来分析分析这句话包含什么信息!首先我要把你的大脑想象成是一个黑箱,我并不知道也没有必要知道你的大脑是如何工作的(真搞明白了可以拿个诺贝尔生物学奖咯),

9、我关心的只是我传给你的是什么信息?你对信息做了哪些处理? 以及你返回给我的是什么信息?需要提醒你一下的是每个方法都会返回一个信息给调用者的,除了构造函数外(后续会做详细的介绍)。我现在需要把自己当作是一名程序员,而你呢?当然就是计算机了!计算机可没有人那么聪明,它只会按事先约好的特定的格式运行,我想让它具有如上所述的功能,我就要先定义这个黑箱!首先我要告诉这个黑箱会有两个整数值给你(这就是所谓的形式参数,是程序员需要给函数体的信息),然后就要定义这个黑箱内部实现这两个整数相乘的运算(这就是黑箱对传入数据所做的加工,根据需要,你可以做任何的加工。)。最后再标注它返回给我一个同样是整型的数值(这是

10、黑箱返回给程序员的信息)。一个函数就这样定义完了,让我们来看看书写格式:(Java格式)int multiplyNum(int x,int y) return x*y;分析!int /*返回值类型*/ multiplyNum /*方法(黑箱)名称*/ (int x,int y/*传入的参数*/) return x*y; /*内部实现的方法(实现相乘运算,)并用return返回给调用者结果*/首先请注意上述标明的“return”语句!return 关键字的含义是向调用者返回紧跟在它后面的信息!就像上面的乘法运算一样,因为我问你,你才会回答我,如果我不问你,你就不用回答我的!在计算机中也一样,定义

11、好这个函数在哪里调用呢?我只能告诉你,哪里需要就在哪里调用!当然,你可以根据需要去更改参数、返回值以及内部实现,具体到如何定义如何调用你只好去参考相关的资料了或者函数的帮助!(所以写注释很重要!)在这里我只是给你一个思想!有时你会遇到这样的问题,我让你记住,我的年龄是XX岁!从字面上理解,你并不需要给我返回信息!又或者说,你给我返回了信息,信息的内容是“无信息”,即返回值类型void。具体的程序如下:int myAge = 0;void remAge(int a) myAge=a;分析!int myAge =0; /定义并初始化我的年龄为0;void /*返回值类型为无返回值类型*/ remA

12、ge /*函数名称*/(int a /*传入的参数*/) myAge=a; /内部实现方法,注意,没有return返回!1.3 了解一下指针(*)与引用(&)指针及引用是在C+中有的,JAVA和C#中没有。JAVA和C#中取消了直接对内存的操作引用主要还是用在函数参数传递(C#有类似的ref/out)和内存地址计算上。所以我在这里就不做过多的介绍了。他们很实用,有兴趣的同事可以参阅C+相关书籍。1.4 运算符以及控制语句各种+ - * / % ?: + - 单目、双目、三目运算符的使用;If else ,switch case , do while , for 等逻辑控制语法;通过运算符和逻辑

13、控制语句构成了算法,也就是函数内部实现的机制。这里需要提一下递归,即方法内部自己调用自己来返回计算用的值,需要一个出口,否则将无限循环,类似代数中的序列An+1 = f(An),求A(20),当参数n的值等于20时,就是递归的出口了。更多运算符的使用,还是自己看看相关书籍吧,这里就不再熬述了!2 深入探讨面向对象2.1 “类型”的内部细节有了上面的知识,我们现在就可以深入的挖掘类的内部实现了。所有的知识点我都会围绕着类与对象展开,在此之前,我希望你能够确信对以上所介绍的基本内容已完全掌握了!上面提过,面向对象的编程语言最大的特色就是可以编写自己所需的数据类型,以更好的解决问题。我们必须要先搞清

14、楚“类,对象,属性,方法它们之间的关系”!就像我前面所说的,人这个“类”是什么也做不了的,因为“人类”只是一个抽象的概念,它不是实实在在的“东西”,而这个“东西”就是所谓的对象。只有人这个“对象”才能去工作。而类呢?类是对象的描述!对象从类中产生出来!此时,对象具有类所描述的所有的属性以及方法。-一定要理解这句话!也许你已经有些不知所措了,没关系!好好的回味一下,我再举个例子!例如电视机,电视机都有工作原理图,那么什么叫电视机呢?只要它能够实现工作原理图的所有功能的物体,我们都叫它电视机。你想想是不是这么一回事儿?可是,电视机原理图是不能工作的,也就是这个原理图不能收看节目,只有根据原理图生产

15、出来的电视机这个“实体即所谓的对象”才能收看节目,也就是说,从类生成出对象之后才算得上是真正的有意义!才能开始工作。此时,电视机拥有电视原理图所描述的所有的属性及方法!也可以想象工厂中的模具和生产出的零件之间的关系!先前介绍过,类是属性与方法的集合。而这些属性与方法可以被声明为私有的(private),公共的(public)或是受保护(protected)的,他们描述了对类成员的访问控制。下面我分别做一下介绍:1公共的(public):把变量声明为公共类型的之后,那么就可以通过对象来直接访问,一切都是暴露无遗的!也就是说,你的信用卡密码别人也能够直接看到。(如果你编程习惯把所有方法、属性都定义成public,该改改了)2私有的(private):如果把变量声明为私有的情况就好多了,想要得到我的信用卡密码,对象必须要调用专用的方法才能够得到。3受保护的(protected):后续讲解类继承时再讨论。为了实现数据的封装(遵循开放-闭合原则),提高数据的安全性,我们一般会把类的成员变量声明为私有的,而把类的方法声明为公共的。这样,对象能够直接调用类中定义的所有方法,当对象想要修改或得到自己的属性的时候就必须要调用以定义好的专用的方法才能够实现。你想想,你会把你的信用卡密码公布出来嘛?呵呵!所以,我们提倡的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号