一、OOP简介
Object Oriented Programming,面向对象编程。是一种计算机编程架构,其基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
面向对象编程和面向过程编程的区别:
a、面向过程编程(c语言等):解决问题时要基于计算机的结构(必须考虑数据在内存中如何存储,即我们所学习的数据结构课程),程序=算法+数据结构;
b、面向对象编程(c#,java等):解决问题是基于所要解决的问题(即对象)的结构。程序=%算法;
二、面向对象编程语言的三大特性
封装:是所有OOP语言的一个重要特性,是用来按照自然人对于大千事物的理解思维,将物质的属性(私有变量,静态描述)和动态(函数或过程,行为描述)进行抽象化表示的一种编程手段,它的优势在于能够描述一个具有“同性”的抽象事物;
继承:是面向对象编程最重要的一个特性,在C#中,任何一个类都可以继承另一个类,被继承的类称作基类或父类,继承其他类的类叫做派生类或子类,派生类将获取基类的所有非私有数据和行为以及新类为自己定义的所有其他数据和行为,因此,新类具有两个有效类型:新类的类型和它继承的类的类型;
多态:是面向对象程序设计语言最核心的特征,多态意味着一个对象有着多重特征,可以在特定的情况下表现出不同形态,分为编译时多态和运行时多态。编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态性通过虚成员(接口或抽象类方法)实现。编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。
三、类和对象
类:具有相同特性和行为的对象集合。(在某种意义上可以将其看作是一个数据类型);
对象:是基于类的具体实体,有时称为类的实例;
类的一般构成: 常量+变量(字段)+构造方法+方法(行为)+属性(访问器)。
例如:
Public class person
{
private string name;---------字段
public void eat()------------方法
{
console.writeline(“这是eat方法”);
}
public string Name-------字段name的属性
{
get{return name;}
set{name=value;}
}
}
构造函数:类可以定义自己的构造函数,构造函数需要和包含它的类同名,上例中构造函数可以是public person(……){ …… },省略号表示构造函数可以带参数,也可以执行一定语句;另外,类可以接受不同参数的构造函数(多态的体现)
对象可以通过实例化一个类来产生: person no1 = new person(……); 产生对象no1后便可以对其进行一些操作,例如no1.Name=“honglinluoye”;console.writeline(no1.Name);
类的继承:
public class student :person
{
private int studentNumber;
public void study()
{
……;
}
public int StN
{
get{return studentNumber;}
set{studentNumber=value;}
}
}
这时,student类具有的属性为:Name,StN 方法为:eat,study,及具有包括子类和父类的所有方法和属性。
接口:接口是面向对象编程的一个重要内容,主要负责功能的定义。
Interface ImyInterface
{
void sayhello();
string Hello{get;set;} ---------只定义,不实现
}
实现接口:
Public class myclass:ImyInterface
{
public void sayhello()-------实现方法
{
console.writeline(“……”);
}
public string Hello-------实现属性
{
get{return hello;}
set{hello=value;}
}
private string hello=“HelloWorld”;
}
抽象类:提供多个派生类可以共享的基类的公共定义,用abstract关键字定义。
Abstract class class1
{
void sayhello1(){……}------一般方法(实现)
abstract public void sayhello2();------抽象方法(未实现)
string Hello1-------一般属性(实现)
{
get{return hello;}
set{hello=value;}
}
string hello=“helloworld”;
abstract public string Hello2{get;set;}----抽象属性(未实现)
}
可以简单的将抽象类看做类和接口的某种程度上的结合,区别在于接口支持多重继承,而类和抽象类则不支持。