您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 面向对象编程中的基本概念概念
面向对象编程中的基本概念桂勋guinh3@sina.com了解什么是面向对象面向对象的基本概念类对象封装继承多态如何定义类,如何创建对象成员运算符访问控制权限:public和private构造方法主要内容什么是面向对象?ObjectOriendtedProgramming对象以…为导向的程序设计面向对象就是使用对象进行程序设计,简写成OOP。面向对象的编程语言如今,面向对象的编程思想已经成为主流;面向对象的编程语言正大行其道,最具代表性的有:C++JavaC#面向对象的编程思想OOP旨在计算机程序中模拟现实世界中的概念在计算机程序中用相似的实体模拟现实世界中的实体在OOP中,现实世界的所有事物全都被视为对象设计和实现软件系统的方法C语言的编程方式C语言是结构化的编程语言(StructuredProgramming,简作SP);强调精巧的数据结构和优越的算法,关注程序的运行效率;不适合于大规模的程序开发;程序模块之间协调性差,程序的重用性、安全性、健壮性和可维护性都存在较大的缺陷。SP和OOP对比SPOOP设计思路自顶向下、层次化、分解自底向上、对象化、综合程序单元函数模块对象设计方法程序=算法+数据结构程序=对象=数据+方法优点相互独立,代码共享接近人的思维方式模拟客观世界缺点数据与程序不一致维护困难客观世界的无序性概念不成熟面向对象的三大原则封装继承多态对象对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为;对象其实就是“数据”和“函数”的封装体,其中:数据表示自身的状态,也称作“属性”或“成员数据”;函数表示自身的功能,也称作“方法”或“成员函数”。姓名:布兰尼职衔:收银员年龄:35体重:60千克操作:收款打印帐单收银员对象顾客姓名:朱丽叶年龄:28体重:52千克操作:购买商品顾客对象状态行为类人们为了更好地认识世界,将现实生活中的事物(对象)划分成类;同一类中的事物总是具有一些共性;类以共同的特性和行为定义实体;类是具有相同属性和和行为的一组对象的集合。属性事物的特性在类中用变量表示;每个对象的每个属性都拥有其特定的值;属性名称由类的所有对象共享;对象或实体拥有的特征在类中表示时称为属性。学生对象姓名年龄住址……属性方法事物的行为和动作在类中用函数表示;每个对象都有相同的动作和行为;对象执行的操作在类中表示为方法。学生对象吃饭方法睡觉上课……类和对象的区别类是用来描述实体的“模板”或“原型”;对象是实际的实体,每一个对象都是类的一个具体实例;类用来定义对象所有的属性和方法,同一类的所有对象都拥有相同的特征和操作;可以将类理解成生产产品的模具,而对象则是根据此模具生产的一个个产品。类与结构最简单的理解方式:类结构体结构体变量对象CJava区别在于:结构体一般只有数据(属性)而没有函数(方法)。封装将某些东西包装在一起,然后以新的完整形式呈现出来;隐藏属性、方法或实现细节的处理方式称为封装;封装其实就是有选择性地公开或隐藏某些信息,它解决了数据的安全性问题。一个人类的对象姓名:张三体重:50kg……密码:******属性走路吃饭……方法可以公开无所谓不可以公开继承继承就是重用现有的类来生成新类的一种特征;通俗地讲就是从现有的类(即父类或基类)创建新类(子类或派生类)的过程;现实生活中,继承可以达到财产重用的目的,而在Java/C++/C#、中,继承可以使代码重用。多态多态是指同一函数在不同的类中有不同的实现;多态的好处就是使类更灵活,更便于扩充。抽象把相同的或相似的对象归为一类的这个过程就是抽象,所以,抽象就是分析问题的方法;抽象的基本原则:只关心主要问题,而不关心次要问题;只关心主要矛盾,而不关心次要矛盾;只关心相同的东西,而不关心不同的东西;只关心问题是什么,能够完成什么,而不关心怎样去完成。抽象的过程其实就是面向对象编程的核心思想。在Java中定义类/*定义学生类*/classStudent{Stringname;//姓名intage;//年龄floatweight;//体重/*吃饭的方法*/voiddining(){System.out.println(吃饱了...);weight++;}/*走路的方法*/voidwalk(){System.out.println(走累了...);weight--;}}成员变量成员函数定义类的语法class类名{成员列表//包括成员变量和成员函数}在Java中定义类struct结构体名{成员列表//只有成员变量,没有成员函数};在C中定义结构体习惯上,类名的首字母大写,如:Student在Java中创建对象/*Test类,用来容纳main方法*/publicclassTest{/*main方法,程序入口*/publicstaticvoidmain(String[]args){Studentstd;//声明Student类型的引用std=newStudent();//创建Student类型的对象std.name=张三;//为姓名赋值std.age=18;//为年龄赋值std.weight=50;//为体重赋值std.dining();//调用成员方法System.out.println(std.weight);std.walk();System.out.println(std.weight);}}创建对象的语法和数组相似,对象也是引用数据类型,只能使用new运算符从堆中分配内存;创建对象的一般语法:类名引用名=new类名();使用已经定义好的类,创建该类对象的过程称为“实例化”。注意:这里要有括号成员运算符.在C语言中,必须要先声明结构体变量,才可以访问结构体中的成员;同样的,只有先实例化类的对象,才可以访问到类中的成员(属性和方法);使用成员运算符(.)来访问成员属性或成员方法;一般语法是:对象名.成员名如:std.age=18;//为成员属性赋值std.dining();//调用成员方法访问权限:public和privateC语言中结构体的成员可以从任何地方进行访问,这将给数据的安全留下极大的隐患;为了避免从类外部直接访问类成员而造成的数据损坏,Java对类成员的访问制定了约束;关键字public和private是访问修饰符,用来说明某个成员是否可以从类外部进行访问;public修饰的成员可以在任何地方进行访问,不受任何约束;private修饰的成员只能够被本类中的其它成员访问,而不能从类的外部进行访问。访问权限无法从类的外部访问私有成员;其它类的私有成员对于当前类也是隐藏的。可以从类外部访问类属性或方法私有属性或方法公有不可从类外部访问访问权限示例classStudent{privateStringname;//姓名,私有的,不可以从类外部直接访问privateintage;//年龄,私有的,不可以从类外部直接访问privatefloatweight;//体重,私有的,不可以从类外部直接访问//吃饭的方法,公有的,可以从任何地方访问publicvoiddining(){System.out.println(吃饱了...);weight++;//dining方法是类内部成员,可以直接访问本类私有成员}//走路的方法,公有的,可以从任何地方访问publicvoidwalk(){System.out.println(走累了...);weight--;//walk方法是类内部成员,可以直接访问本类私有成员}}publicclassTest{publicstaticvoidmain(String[]args){Studentstd=newStudent();//实例化一个Student对象std.age=18;//试图从类外部访问私有成员,将会报出一个错误std.dining();//允许访问公有成员}}访问权限(续)加上访问修饰符有时候可能会给操作数据带来不便,但可以在很大程度上保证数据的安全;一般地,我们会将成员属性声明为private,而将成员方法声明为public,但这样做并不是绝对的;有时候,类外部可能要操作到某些私有数据成员,那么就可以增加一个公有的方法,再由这个方法来操作私有数据,避免因类外部的误操作而造成的数据损坏;因为main方法要由类外部的虚拟机来调用,所以main方法必须声明成public。修改Student类classStudent{//定义学生类privateStringname;//姓名,私有privateintage;//年龄,私有privatefloatweight;//体重,私有publicvoidsetName(Stringname){//为姓名赋值的方法,公有this.name=name;}publicvoidsetAge(inta){//为年龄赋值的方法,公有age=a;}publicvoidsetWeight(floatw){//为体重赋值的方法,公有weight=w;}publicvoiddisplay(){//将所有信息打印出来的方法,公有System.out.println(姓名:+name+,年龄:+age+,体重:+weight);}publicvoiddining(){……}//吃饭的方法,公有,代码略publicvoidwalk(){……}//走路的方法,公有,代码略}publicclassTest{publicstaticvoidmain(String[]args){Studentstd=newStudent();//实例化学生类对象std.setName(张三);//为姓名赋值std.setAge(18);//为年龄赋值std.setWeight(55);//为体重赋值std.dining();//调用吃饭的方法std.display();//将信息打印出来}}对象初始化在上例中,只能逐个地为数据成员赋值,如果想在对象实例化的同时就初始化成员属性,就使用到了构造方法;构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用;请注意:构造方法没有返回值类型,也不能有返回值。构造方法示例/*定义ConstructorDemo类,对构造方法进行测试*/classConstructorDemo{/*构造方法,方法名与类名完全一致无需指定返回值类型,也不能有返回值*/publicConstructorDemo(){System.out.println(这是构造方法);}}/*Test类,用来容纳main方法一般将包含有main方法的类声明为public*/publicclassTest{/*main方法,程序入口*/publicstaticvoidmain(String[]args){/*实例化ConstructorDemo类的对象*/ConstructorDemocd=newConstructorDemo();}}构造方法正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员;构造方法的一般形式:访问权限类名(形参列表){方法体}因为是由虚拟机来调用构造方法,所以构造方法一般应定义成public。为Student类添加构造方法classStudent{//定义学生类privateStringname;//姓名,私有privateintage;//年龄,私有privatefloatweight;//体重,私有//构造方法,根据传递进来的参数,为数据成员赋值publicStudent(Stringn,inta,floatw){//分别为每个数据成员赋初始值name=n;age=a;weight=w;}publicvoidsetName(Stringn){……}//为姓名赋值的方法,公有,代码略publicvoidsetAge(inta){……}//为年龄赋值的方法,公有,代码略publ
本文标题:面向对象编程中的基本概念概念
链接地址:https://www.777doc.com/doc-6323847 .html