什么是面向对象编程

什么是面向对象编程
面向对象编程是创建计算机应用程序的一种相当新的方法,他解决了传统编程技巧带来的许多问题。前面介绍的编程方法叫做函数化(或过程话)编程,常常会导致一些单一应用程序,即所有的功能都包含在几个代码块中。而使用oop技术,常常要使用许多代码块,每个模块都有特定的功能,每个模块都是独立的,甚至于其他模块完全独立。這中模块化方法提供了非常大的多样性,大大增加了代码重用的机会。
什么是对象
对象就是oop应用程序中的一个组成部件。這各组成部件封装了部分应用程序,這部分应用程序可以是一个过程一个数据,或一些更抽象的实体,简单的说对象非常类似于本书前面讨论的结构类型,包含变量成员和函数类型。他所包含的变量组成了储存在对象中的数据,其包含的函数可以访问对象的功能。略微复杂的对象可能不包含任何数据,而只包含函数,表示一个过程
C#中的对象从类型中创建,就像前面的变量一样。对象的类型在oop中有个特殊的名"类"(class)可使用类的定义实例化对象,这表示创建该类的一个实例。类的实例和对象表示相同含义
类 == 磨具
对象 == 产品
本章使用通用建模语言(Universal Modeling Lanauage ,UML) 语法研究类和对象
属性和字段
属性和字段可以访问对象中包含的数据。這个对象数据可以用来区分不同对象,因为同一类的不同对象在属性和字段中储存了不停的值。包含在对象中的不同数据统称对象的状态,假定一个对象类表示一杯咖啡,叫做CupOfCoffice。在实例化這各类(即创建这个类的对象的时候)时。必须提供对类有意义的状态,此时可以使用属性和字段,让代码能同过该对象要使用的咖啡品牌,咖啡中是否加牛奶或方糖,等等。
字段和属性都可以输入,所以可以把信息储存在字段和属性中,作为String变量、int变量、等。但是属性与字段是不同的,因为属性不能直接访问数据,对象(类(Class)的实例)能让用户不考虑数据细节,不需要在属性中一对一的方式表示
· public readonly string Name; //字段
public int Val //定义属性
{
get
{
return intVal; //get 块必须有个属性类型的返回值。可以直接返回该字段的值
}
set
{
if (value >= 0 && value <= 10) //value 用户提供的属性值
intVal = value;
else
throw (new ArgumentOutOfRangeException("Val", value, "Val must be assigned a value between 0 and 10."));// 抛出异常
}
}

如果在CupOfCoffice实例中使用一个字段表示方糖的数量,用户就可以在该字段中放自己喜欢的值由取值范围限定(int取值范围)一般情况下在访问状态是最好提供属性而不是提供字段,因为這样可以更好地控制整个过程,对属性的读写访问也可由对象(实例化Class)明确定义。某些属性是只读的,只能查看他们的值而不能改变他们呢(至少不能直接改变)。这通常是同时取读几个状态的一个有效技巧CupOfCoffice有一个只读的属性Description,在请求他是就返回一个字符串,表示该类的一个实例(对象)的状态,除了对属性的读写访问外,还可以为字段和属性指定另一种访问,成为可访问性。這中可访问性确定了什么代码可以访问這写成员,他们可以用于所有代码(公共public),还可以只能用于类中的代码(私有priv.....),或者更发杂的模式,常见情况下是吧把字段设置为私有通过工会公属性访问他们,這样类中代码就可以直接访问储存在字段中的代码,以防止用户在其中放置无效内容
方法
方法這个术语用于表示对象中的函数,這些函数调用与其他函数相同,使用返回值和参数的方法也相同。方法用于访问对象的功能,与字段和属性一样方法也可以是公共或私有的,按照需要限制外部代码的访问。他们常常使用对象状态(包含在对象中不同的数据统称为对象的状态)影响他们的操作,在需要时访问私有成员,如私有字段

每个变量类型都是一个类
变量类型 == 类 ~实例化
变量 == 对象

<String>.Length 等 句点字符吧对象实例名和属性和方法名分格开来
对象实例名.属性OR方法

对象
每个对象都有一个明确定义的生命周期,除了正在使用的正常状态外,还有两个重要状态。
···构造阶段:对象最初进行实例的时期,這个初始化过程称为初始化阶段,由构造函数完成。
···析构阶段:再删除一个对象时,常常要执行一些清理工作,例如释放内存,這是由,析构函数完成的。

---构造函数
对象的初始化过程是自动完成的。我们不需要去寻找一个适合于储存新对象的内存空间,但是在储存对象的过程中,有时需要执行一些额外工作。例如,初始化对象储存的数据。构造函数就是用于初始化数据的函数。
所有的对象都有一个默认的构造函数,该函数没有参数于类同名,一个类可以包含几个带参数的构造函数,成为非默认构造函数,代码可以使用他们以许多方式实例化对象。例如给储存在对象中的数据初始值。在C#中,构造函数用new关键字来调用。例如:
CupOfCoffice myCup = new CupOfCoffice();
//通过其默认构造函数实例化一个CupOfCoffice对象
CupOfCoffice myCup = new CupOfCoffice("BlueMountain");
//通过非默认构造函数来实例化对象
构造函数与字段和属性一样,可以是公有或私有,在类外部的代码不能使用私有构造函数实例化对象,而必须使用公共构造函数,這样,就可以要求类的用户使用非默认构造函数
一些类没有公共构造函数,外部代码就不可能实例化他们,但是这些类并不是完全没有用的。

静态和实例类成员
属性、方法和字段等成员是对象实例所特有的,除此之外还有静态成员(共享成员),例如静态方法、静态属性、静态字段。
静态成员可以在类的实力之间共享,所以可以看作他们是类的全局对象例如
Console.WriterLine();
Convert.ToString();
方法是静态的。根本不需要实例化。如果你尝试实例化Console或Convert,操作会失败,因为這写类的构造函数不是可公共访问的。

时间: 2024-10-28 16:32:30

什么是面向对象编程的相关文章

面向对象编程

面向对象:类,属性,方法 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的"对象",每个对象都拥有相同的方法,但各自的数据可能不同. 仍以Student类为例,在Python中,定义类是通过class关键字: class Student(object): pass class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下

python面向对象编程

java和c#只支持面向对象编程,python即可支持面向对象也可以支持函数式编程. 面向对象两个重要的概念:  1.类 2.对象 函数式 def sendemail(email,msg):            函数 print("8888") 面向对象 class Myclass: def sendmail(self,email,msg):      函数定义在类中第一个参数必须是self print("8888")              函数在类中定义叫方

面向对象编程的一些理解

(1) 简单的说类是对象的模版. 首先我们可以来理解一下对象的概念,面向对象编程的程序实际就是多个对象的集合,我们可以把所有的事物都抽象成对象,在程序设计中可以看作:对象=属性+方法.属性就是对象的数据,而方法就是对象的行为. 下面来说类,就像我开头所说类是对象的模版,而对象是类的实例化.举个例子,饼干模子可以看作是类,而具体的饼干就是对象.再比如有一个类是表示人,然后可以通过人这个模版来实例化出张三.李四... 比如说一个类是描述人的特征,为什么实例化? p = People(); 这个人有很

Python之路【第五篇】:面向对象编程

面向对象编程思维导向图 http://naotu.baidu.com/file/03516c91377d6cad0ded041aa4ce4433?token=ccaba09527261666 密码: Tim 面向:过程.函数.对象 面向过程:根据业务逻辑从上到下写垒代码! 面向过程的编程弊:每次调用的时候都的重写,代码特别长,代码重用性没有,每次增加新功能所有的代码都的修改!那有什么办法解决上面出现的弊端呢?函数就出现了. 面向函数:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可!

C++ Primer 学习笔记_73_面向对象编程 --再谈文本查询示例

面向对象编程 --再谈文本查询示例 引言: 扩展第10.6节的文本查询应用程序,使我们的系统可以支持更复杂的查询. 为了说明问题,将用下面的简单小说来运行查询: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he

C++ Primer 学习笔记_74_面向对象编程 --再谈文本查询示例[续/习题]

面向对象编程 --再谈文本查询示例[续/习题] //P522 习题15.41 //1 in TextQuery.h #ifndef TEXTQUERY_H_INCLUDED #define TEXTQUERY_H_INCLUDED #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <set> #include <map&g

面向对象编程---图片轮播

今天复习了一下面向对象编程,下面是我的效果图 看着这个图片你会觉得这没有什么,那么上代码: html部分: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <style> 7 ul,ol,li{padding:0;margin:0;li

《Java面向对象编程第二版》今年出版以来获得读者一致好评。

<Java面向对象编程第一版>自2016年出版以来,承蒙读者们的厚爱,至今已经重印了二十多次,成为国内Java领域里的经典Java技术宝典.在当当网上获得了1500多条好评: http://product.dangdang.com/9186890.html?point=comment_point 应广大读者的要求,为第一版进行了升级,第二版融合了最新的Java8的语言特性,它继续为Java开发人员们提供丰富全面的技术支持和帮助.在京东网上读者们对第二版的好评如潮,一致认为这是Java开发人员必

面向对象编程与面向过程编程的区别与联系

LinuxC编程的学习已经告一段落,这段开始学C++.C++是面向对象编程,C语言是面向过程编程.因此学习C++的第一件事就是要弄明白什么是面向过程编程,什么是面向对象编程. 之前学习的C语言是面向过程编程,回想一下C语言编程的过程.主函数,定义变量,调用函数然后实现.面向过程编程是一种非常具体,要面面俱到的的编程方式.而面向对象是以对象为单位来进行编程,比较像正常人的思维. 下面我们举个例子,比如开车.加速.减速.刹车. 用面向过程来说就是你要先有一个车,然后这四个分别是4件事,也就是说你要写

go语言学习(五)——面向对象编程

主要讲的是"类"和接口&和其他传统语言不一样的地方挺多的,断断续续看了好几天 下面是我的练习代码 // GoStudy0219 project main.go /* go语言学习--面向对象编程(1) go中类型的值语义和引用语义 结构体(类)的定义和初始化 */ package main import ( "fmt" ) func main() { //几种"类"的初始化 v1 := &character{"Tom&q