软件开发那点事-面向对象

前言

面向对象对于程序员来讲是一个很重要的概念,不了解面向对象的理论知识,在学习面向对象的语言时就会产生困惑

1,面向对象含义

  • 起源:
  • 早期程序设计都是面向过程,而随着时间的发展问题的复杂度也逐渐提升。这样对于使用面向过程的设计变得越来越复杂
  • 而面向对象在这一时刻从天而降,带来了全新的解决问题的方案,并逐渐发展为主流
  • 对比:

古时候,文章不多的时候,印刷时固定刻板就可以了,而随着文章逐渐增多,每次都重新刻板就很麻烦了,这个时候活字印刷就出来了
面向对象和面向过程的区别类似于此:

面向对象解决问题更加灵活简单,采用封装的技术方法就可以一次编程、多次调用,并且使用属性这样的方式,降低了耦合性,可以更简单的去利用,去理解

2,面向对象的特点

封装:

封装就是将一系列程序逻辑打包成为一个类,仅仅对外展示这个类的属性,使用时无需关注其任何的内部结构,直接使用对外接口即可:

继承:

继承很容易理解,父亲的DNA传给儿子就是一种继承。在面向对象的编程中,被继承的类称为父类基类,而继承的类称为子类派生类。继承需要遵循一定的规则:

在OOP(面向对象编程)中,可以使用类名后面加冒号加被继承的类的方法实现继承

继承规则:

  • c++ 可以实现多继承,而像c#则只支持单继承,要实现多继承,则需要通过接口来实现
  • 静态类不能被继承。因为静态类中只包含静态方法和静态属性,不能被实例化,

多态:

多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。

多态的几种实现方式:

  • 虚函数
  • 抽象类
  • 重载
  • 覆盖
  • 模板(重载和多态无关)

3,类的特点

面向对象一个重要的概念就是类,对于类的深入理解可以更好的学习了解面向对象的概念(本博客关于类的概念基于C#)

3.1、类的区分

静态类与实例类:

静态类使用修饰符static来修饰,静态类内的属性方法都为必须为静态成员,创建一个静态类可以理解为创建一个直接实例化的类,但是个别细节与实例化不同

而未使用static修饰的则为实例类,实例类里面的函数定义没有要求,可以定义为静态成员或实例成员

而使用static修饰创建类内的属性或方法被称为静态成员,静态成员属于类,在调用时,直接通过 类名.静态成员 的方式调用

关于静态成员特点:

  • 当类第一次被访问的时候,就会将这个类下面的所有的静态成员创建在内存当中
  • 静态成员既不在栈也不在堆中。创建在静态存储区
  • 静态成员只创建一次,在类第一次被访问的时候创建
  • 静态成员被创建在静态存储区后,直到程序结束后才会被回收

而没有使用static修时的属性方法为实例成员,实例成员属于对象,需要通过实例化后再访问。

通过代码来理解静态成员与实例成员以及访问方式:

class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Exam exam=new Exam{
    
    };
            Console.WriteLine(exam.i);   //实例成员需要先实例化再访问

            Console.WriteLine(Exam.j);   //静态成员直接通过类名访问      
        }
    }
    public class Exam  //实例
    {
    
    
        public int i=1;      
        public static int j=2;
    }

抽象类:

抽象类的特点很简单,就是只能作为基类被其他类继承,而不能实例化

可以使用abstract来修饰抽象类,抽象类和静态类不同。抽象类里可以包含两种抽象成员,分别是抽象方法声明和抽象属性,同时也可以包含其他非抽象成员,具体的使用方式为:

public abstract class Abst  //抽象类
    {
    
    
        public int i=1;
        public abstract void print(); //定义一个抽象成员
        
    }
    public class Demo:Abst  //继承该抽象类
    {
    
    
        public override void print()   //抽象成员要重写,用修饰符override
        {
    
    
            Console.WriteLine("yes ok!");
        }
    }
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Demo demo=new Demo{
    
    };     
            Console.WriteLine(demo.i);
            demo.print();
       }
    }

未完待续--------

猜你喜欢

转载自blog.csdn.net/xinzhilinger/article/details/109827291