面向对象编程,我思想
blueski推荐[2005-7-23]
出处:来自网上
作者:韩景维
1 类和对象初探
2 内置数据类型和
3 深入探讨面向对象
4 起来看看workstation这个类
5 构造、默认构造、 缺省构造
6 重载构造
前言:整理这份资料目是为了帮助朋友们能够更直观理解面向对象编程让后来者能够少走些弯路但其中不免有许多漏洞及也还请前辈提出宝贵更改意见毕竟交流会让我们不断进步
技术是日新月异他不会等待你成长技术要拿出来于别人交流自己学是自己主观意识上理解有对有错!交流会让进步变得更快我认为如果计算机体系结构不发生革命性变化我们现在所应用语言也就百变不离奇踪了!学编程学是什么?思想!精通门编程语言(最好是面向对象语言)后再去搞其他编程语言你会发现过程是如此行云流水!为什么?你已经把编程思想掌握了再去学其他无非是学习种新语法格式了
我在这里并不是和你讨论如何去用C或JAVA也不是和你讨论如何去学他们我要和你讨论是如何去理解面向对象其中主要会涉及到“类、对象、继承、属性、思路方法、静态、重载、隐藏、重构、声明、定义、化、赋值等”其中有许多相关技术我只会代而过让你有种到此游意味我就达到目了而更详细技术内幕就请参考其他相关书籍而深入研究吧!我只是在和你探讨如何去更好理解面向对象!
如何去提高效率?重复使用资源把别人东西拿来就用这是很不错主意!而对于你来说最大资源就是信心以及积极性!好打起精神来让我们同到面向对象编程中去寻幽访胜吧!
注:文章中所有例子我都使用JAVA写当然在C中也就大同小异了了区别地方我会指出!
注:文章中正文文字用黑色介绍说明文字用蓝色强调文字用橙色批改文字用红色!
正文:
1.基本概念:
1.1 类和对象初探
要我说无论是面向过程语言也好面向对象语言也罢我首先要给他讲都是类和对象!--------“这个世界是由什么组成?”这个问题如果让区别人来回答会得到区别答案如果是个化学家他也许会告诉你“还用问嘛?这个世界是由分子、原子、离子等等化学物质组成”如果是个画家呢?他也许会告诉你“这个世界是由区别颜色所组成”……呵呵众说纷纭吧!但如果让个分类学家来考虑问题就有趣多了他会告诉你“这个世界是由区别类型物和事所构成”好!作为面向对象员来说我们要站在分类学家角度去考虑问题!是这个世界是由动物、植物等组成动物又分为单细胞动物、多细胞动物、哺乳动物等等哺乳动物又分为人、大象、老虎……就这样分下去了!
现在站在抽象角度我们给“类”下个定义吧!我意思是站在抽象角度你回答我“什么是人类?”首先让我们来看看人类所具有些特征这个特征包括属性(些参数数值)以及思路方法(些行为他能干什么!)每个人都有身高、体重、年龄、血型等等些属性人会劳动、人都会直立行走、人都会用自己头脑去创造工具等等这些思路方法!人的所以能区别于其它类型动物是每个人都具有人这个群体属性和思路方法“人类”只是个抽象概念它仅仅是个概念它是不存在实体!但是所有具备“人类”这个群体属性和思路方法对象都叫人!这个对象“人”是实际存在实体!每个人都是人这个群体个对象老虎为什么不是人?它不具备人这个群体属性和思路方法老虎不会直立行走不会使用工具等等!所以说老虎不是人!
由此可见-------类描述了组有相同特性(属性)和相同行为(思路方法)对象在中类实际上就是数据类型!例如:整数小数等等整数也有组特性和行为面向过程语言和面相对象语言区别就在于面向过程语言不允许员自己定义数据类型而只能使用中内置数据类型!而为了模拟真实世界为了更好解决问题往往我们需要创建解决问题所必需数据类型!面向对象编程为我们提供了解决方案
1.2 内置数据类型和:
计算机在存储数据时必须跟踪3个基本属性为:
1. 信息存储在何处;
2. 存储值是多少;
3. 存储信息是什么类型;
让我们来看看编程语言内置数据类型都有哪些!(呵呵这个不大好说每门语言都有自己独特数据类型但这毕竟是少数比如在JAVA中有类型数据而在C中就没有希望你能举反 3!)比如整数” ”浮点类型数据”float”!串”String”以及还有结构体等等然而在写时候根据需要我们会创建个类型变量或常量例如:由于我们需要创建个整形变量i为5我们就可以这样做 i = 5;而根据需要我很有可能改变i值也就是从新给它赋值比如让它等和6就可以在所需地方改成i = 6;由此我们知道在“值”上可以发生变化量就叫变量不会发生变化量就叫做常量了在C中用const关键字来声明而在JAVA中则使用final关键字来声明由于区别语言声明格式不样这里就不做介绍了详细内容清查阅相关书籍!
在这里我们主要讨论下我们可以把想象成个“实现某种特定功能黑匣子”-------这个功能是由你来设定举个例子来说:现在我问你“2+3等于多少”?我相信你能很快回答我等于5让我们来分析分析这句话包含什么信息!首先我要把你大脑想象成是个黑匣子我并不知道也没有必要知道你大脑是如何工作(也就是如何运算)我关心只是我传给你是什么信息?你对信息做了哪些处理? 以及你返回给我是什么信息?需要提醒你下是每个思路方法都会返回个信息给者除了构造外(稍候我会作详细介绍)我现在需要把自己当作是名员而你呢?当然就是计算机了!计算机可没有人那么聪明它只会按事先约好特定格式运行我想让它具有如上所述功能我就要先定义这个黑匣子!首先我要告诉这个黑匣子会有两个整数值给你(这就是所谓参数是员需要给黑匣子信息)然后就要定义这个黑匣子内部实现这两个整数相加运算(这就是黑匣子对数据所做加工根据需要你可以做任何加工)最后再标注它返回给我个同样是整型数值(这是黑匣子返回给员信息)个就这样定义完了让我们来看看书写格式:
addnum( x, y){
x+y;
}
具体含义是这样:
/*返回值类型*/ addnum /*思路方法(黑匣子)名称*/ ( x, y/*传入参数*/){
x+y; /*内部是想思路方法(实现相加运算)并用返回给者结果*/
}
首先请注意上明“”语句! 关键字含义是向者返回紧跟在它后面信息!就像上面样我问你你才会回答我如果我不问你你就不用回答我!在计算机中也样定义好这个在哪里呢?我只能告诉你哪里需要就在哪里!当然你可以根据需要去更改参数、返回值以及内部实现具体到如何定义如何你只好去参考相关资料了!在这里我只是给你个思想!
有时你会遇到这样问题我让你记住我年龄是20岁!从字面上理解你并没有给我返回信息!然而事实上你确实给我返回了信息信息内容是“无信息也就是无返回值类型void”具体如下:
myAge = 0;
a=20;
void remAge( a){
myAge=a;
}
具体介绍说明如下:
myAge =0; //定义并化我年龄为0;
a=20; /*定义变量a等于20*/
void /*返回值类型为无返回值类型*/ remAge /*名称*/( a /*传入参数*/){
myAge=a; //内部实现思路方法注意没有返回!!!
}
有关话题还有很多很多这里就不介绍了我目是让你知道是如何会事儿!为下面讨论作铺垫!
1.3 指针以及引用:
指针及引用是在C中有JAVA中没有JAVA中取消了对内存操作随的而来事也取消了操作符重载操作不过在稍候我还是会介绍些操作符重载功能等引用主要还是用在参数传递上所以我在这里就不做过多介绍了他们很实用有兴趣同学可以参阅C相关书籍
1.4 运算符及控制语句:
还是自己看看相关书籍吧这里就不再熬述了!
2.深入探讨面向对象:
2.1“类型”内部细节:
有了上面知识我们现在就可以深入挖掘类内部实现了所有知识点我都会围绕着类和对象展开在此的前我希望你能够确信对以上所介绍基本内容已完全掌握了!
是面向对象编程语言最大特色就是可以编写自己所需数据类型以更好解决问题我想我必须要帮你搞清楚“类对象属性思路方法它们的间关系”!就像我前面所说人这个“类”是什么也做不了“人类”只是个抽象概念它不是实实在在“东西”而这个“东西”就是所谓对象只有人这个“对象”才能去工作而类呢?类是对象描述!对象从类中产生出来!此时对象具有类所描述所有属性以及思路方法-------定要理解这句话!!!
也许你已经有些不知所措了没关系!好好回味下我再举个例子!例如电视机电视机都有工作原理图那么什么叫电视机呢?只要它能够实现工作原理图所有功能物体我们都叫它电视机你想想是不是这么回事儿?可是电视机原理图是不能工作也就是这个原理图不能收看节目只有电视机这个“实体——即所谓对象”才能收看节目也就是说从类生成出对象的后才算得上是真正有意义!才能开始工作此时电视机拥有电视原理图所描述所有属性及思路方法!明白了吧呵呵!
我先前介绍过类是属性和思路方法集合而这些属性和思路方法可以被声明为私有(private)公共(public)或是受保护(protected)他们描述了对类成员访问控制下面我分别做下介绍:
1. 公共(public):把变量声明为公共类型的后那么就可以通过对象来直接访问切都是暴露无遗!也就是说你信用卡密码别人也能够直接得到
2. 私有(private):如果把变量声明为私有情况就好多了想要得到我信用卡密码对象必须要专用思路方法才能够得到
3. 受保护(protected):介绍继承时再讨论
4. 默认控制访问符(friendly)://JAVA中有而C中没有
为了实现数据封装提高数据安全性我们般会把类属性声明为私有而把类思路方法声明为公共这样对象能够直接类中定义所有思路方法当对象想要修改或得到自己属性时候就必须要以定义好专用思路方法才能够实现你想想你会把你信用卡密码公布出来嘛?呵呵!所以我们提倡是:“对象调思路方法思路方法改属性”;
2.2通过例子看内存分配:
说了这么多让我们来看个例子吧!比如:现在我们要编写某家公司员工管理系统你认为最合适数据类型是什么?我认为是员工个人!但是在面向过程语言中这样做是不允许它只能使用语言中内部数据类型!而员工不在这个内部数据类型的内!也许有人会说可以用C语言中struct好注意!毕竟它是类基础!如果你以前是名面C或B员请你忘掉这些让我们起看看如何用类来实现这切吧!
某家公司员工是人类个特殊群体它除了具备人类所有特性和思路方法外它还有额外特性和思路方法比如她有她工资、信用卡密码、作息时间等等这些特性以及工作内容工作量等等这些思路方法而在计算机中我们该如何定义这个类呢?下面我将写出它格式让你看看在计算机中它是张什么样子!
/*在此我需要再次声明是我用是JAVA格式在语法格式上它和C大不相同!许多细节以及内部操作都有诸多区别而在思想上确实大同小异*/
//employee.java
public employee{
private String name; //员工姓名
private age; //员工年龄
private char sex; //员工性别
private float emolument; //员工薪水
private boolean lunch; //员工午餐
//……等等
public void heater{ //这个思路方法是用来加工员工午餐
lunch = true;
}
public void Name(String a){ //这个思路方法是修改员工姓名
name= a;
}
public String getName{ //这个思路方法是得到员工姓名
name;
}
//……等等
}
这样我们就定义完了我们所需要数据类型现在让我们来看看它能够干什么以及如何工作!
我想要做是工作室里有个光杆司令叫“jingwei”我修改它名字后对对它进行输出看看我是如何做吧!
注意:请仔细观察对象是如何思路方法它使用了“.”操作符!事实上是这样对象公共属性或思路方法时就会使用“.”操作符
然而在C中如果定义个同类型指针该指针此对象思路方法时就会使用“->”操作符更详细内容清参阅相关书籍了!
//workstation.java
import java.awt.Graphics;
import java.applet.Applet;
public workstation extends Applet{
private employee jingwei ; //对象声明此时并不分配内存!
public void init{
jingwei = employee; /*此时创建对象会构造稍候介绍*/
jingwei.Name(“jw”); //设置我名字
}
public void pa(Graphics g){
&nb
[1][2][3]下页
最新评论