首先附上一个我觉得写的不错的知乎文章:
https://zhuanlan.zhihu.com/p/92362781
面向对象是一个编程思想,或者说是编程理念。并不是谁给了一串balabala的代码,然后我和你说噢这个是面向对象。
所以到底怎么去细致理解这个概念?来看代码.
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharplearn
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
}
这是我们最熟悉的程序HelloWorld程序,我们都知道运行这个程序会弹出一个控制台输出Hello World.
我现在变一下代码
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharplearn
{
public static class 要输出的玩意
{
public static string a = "Hello World"; //新手无视掉public和static,只要理解这里创建了一个字符串字段a并赋值了一个字符串"Hello World"
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(要输出的玩意.a); //括号里面就是"要输出的玩意"类里的字段a
}
}
}
不难看出,我就是写了个新类,把Hello World字符串放到了类里,然后再让Console.WriteLine输出新类里的字段,难道这就是面向对象编程了吗?对,没错,这就是面向对象编程.
那有些人就有很多疑问了,比如:
Q:是不是我只要把可能会发生变化的东西独立到一个类里就是面向对象了?
A:可以…这么理解?
Q:这么做到底有什么好处?我为了输出一个"Hello World"还要敲那么多字,还更麻烦了.
A:这是个关键问题.试想一下,你未来做了一个功能强大的软件,有数个G这么大,千百种功能,其中就包含输出Hello World.你把这数百种功能都糅合在了一个exe里面.过了不久因为这样那样的事情你要把输出Hello World改成输出Hello Earth.但就为了这么一个小小的改动你就要重新再编译很久时间,你的用户也要跟着更新几个G.为了每一次改动就要重新下载你的软件,岂不是巨麻烦?
再看看第二段代码.当我要改输出的内容时,我只要直接改"要输出的玩意"类就可以了.如果我要添加什么花里胡哨的功能我只要改Main()方法就可以了.是不是巨方便?
第二个案例
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharplearn
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World"+"就是我!");
Console.WriteLine("Hello World" + "不是我!");
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace CSharplearn
{
public static class 要输出的玩意
{
public static string a = "Hello World";
}
public static class 打印方法
{
public static void Method2()
{
Console.WriteLine(要输出的玩意.a + "就是我!");
}
public static void Method1()
{
Console.WriteLine(要输出的玩意.a + "不是我!");
}
}
class Program
{
static void Main(string[] args)
{
打印方法.Method2();
打印方法.Method1();
}
}
}
两个代码的输出结果都是下图
第二个案例第二段代码和第一段代码的区别就是,要输出的字符串,输出方法和主要执行体被分割成了三个部分,输出方法里共用到了一个字段;而第一段代码两行代码就粗暴搞定了要做的事情.大费周章写第二段的用意何在?再试想一下,你的程序多了好几个功能都要使用到同一个功能或者同一个属性,难道在写那几个功能的时候我还要重写相同的代码?再多几十个,几百个也重写?
这就是面向对象编程的主要思想.去掉重复多余的部分,把各个功能独立成一个个文件方便维护.这是一种做软件的思考方式.