对于初学者,我们首先要知道以下两个概念:
- 面向过程与面向对象
不知道大家最初学的编程语言是不是C语言,如果学过C语言,应该知道C语言是一门面向过程的语言;而Java和Python从设计之初就已经是一门面向对象的语言;PHP语言可以同时应用面向过程和面向对象编程。
可以简单地理解为:面向谁就是以谁为中心,具体来说:
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
- 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
比如以动物而言:
动物吃饭是一个事件,睡觉是另一个事件。在编程序的时候我们关心的是某一个事件。而不是动物本身。我们分别对吃饭和睡觉编写程序。简单粗暴点就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。
对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。
比如拿我们早上起来这件事说明面向过程,粗略的可以将过程拟为:
- 起床
- 穿衣
- 刷牙洗脸
- 吃早餐
这4步一步一步地完成,它的顺序很重要,你只需要一个一个地实现就行了。
而如果是用面向对象的方法的话,我们可以抽象出一个类,它包括这四个方法,但是具体的顺序可以不按照原来的顺序。
我们上代码,这样体会更深一些:
#include"stdio.h"
void introduction(char name[10],int age){
printf("我的名字是%s\n",name);
printf("我今年%d岁了\n",age);
}
void eat(char food[10]){
printf("我喜欢吃%s\n",food);
}
void main(){
introduction("萨摩耶", 2);
eat("酸奶");
}
这里,我们把自我介绍和吃东西作为事件,可以看出,C语言注重于完成事件本身。
再来看看Java:
public class Animals {
private String name;
private String food;
public Animals(String my_name, String my_food){
this.name = my_name;
this.food = my_food;
}
public void introduction(int age){
System.out.println("我是" + this.name);
System.out.println("我今年" + age + "岁了");
}
public void eat(){
System.out.println("我喜欢吃" + this.food);
}
public static void main(String[] args){
Animals dog = new Animals("萨摩耶", "酸奶");
dog.introduction(2);
dog.eat();
}
}
我们可以定义一个动物类,狗是里面的一个对象。
这里所说的对象,可不是那个"对象",在谈"对象"之前,我们先谈谈类:
类:类是一个模板,它描述一类对象的行为和状态。
拿动物类举个例子,动物有自己的属性,动物里有猫猫狗狗都有这一属性,当然,猫和狗是可以有不同的行为,比如叫声的不同。这里的猫和狗就是动物类下面的两个对象:
对象:对象是类的一个实例(对象不是女朋友),有状态和行为。
在Java中,关键字new可以用来创建一个新的对象。
我们再来看看Python:
class Animals():
def __init__(self, my_name, my_food):
self.name = my_name
self.food = my_food
def introduction(self, age):
print("我是", self.name)
print("我今年", age, "岁了")
def eat(self):
print("我喜欢吃", self.food)
def main():
dog = Animals("萨摩耶", "酸奶")
dog.introduction(2)
dog.eat()
if __name__ == '__main__':
main()
python的语法非常简单,也非常易读,class ClassName(): 即可创建一个类,实例化时,只需要ObjectName = ClassName() ,且一个类下可以创建多个对象。
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
讲的再具体点就是:
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
- 对象(Object):通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。对象是类的实例。
刚刚的代码只是让大家有一个简单的总览,下面我们就来具体分析一下:
首先,编程的思想是非常重要的,编程只是一个工具,我们先要把意图搞清楚才能开始编程,一般情况下,我们会先画一张流程图,如果觉得麻烦,在写代码时也要清楚整个程序的思路。除此之外,如果你编写了很多程序之后,你会发现,很少情况下能从上往下写代码,给大家分享一下我编程时的思路:
void introduction(){
}
void eat(){
}
void main(){
introduction();
eat();
}
我们的目的很明确:完成两个事件,一个名为introduction,另一个名为eat,最后通过main函数调用。这个框架有了,我们直接往里面填充就行了,比如我们要写一个printf语句,那我们才会想到要加一个头文件:
#include"stdio.h"
当然,如果你知道下面肯定会用到这个文件,你也可以先写上,但是不建议让固化思想限制了编程的思想。
编写Java的思路也是如此:
public class Animals {
public Animals(){
}
public void introduction(){
}
public void eat(){
}
public static void main(String[] args){
Animals dog = new Animals();
dog.introduction();
dog.eat();
}
}
先想好类名,也就是刚开始新建.java文件时的文件名,这里需要注意的是对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
这里再简单讲讲Java的语法,从字面上理解public即公共的,除此之外还有private私有的以及protected受保护的,这里简单了解即可,初学者知道public即可。
另外,所有的 Java 程序由 public static void main(String[] args) 方法开始执行。
再来看看python:
class Animals():
def __init__(self):
pass
def introduction(self):
pass
def eat(self):
pass
def main():
dog = Animals()
dog.introduction()
dog.eat()
if __name__ == '__main__':
main()
对比以上三种语言,其实各种语言都有它的优势所在,不过我个人还是比较喜欢python,在语法上非常简洁,用ObjectName = ClassName()即可新建一个对象即我们所说的实例化类。
有了框架以后,我们直接往里面填充代码即可,首先来对比一下声明变量的方式:
在C语言中,我们必须先定义变量,才能使用它:
char name[10];
int age;
且每条语句要用分号(;)结束,如果是循环,需要加一个花括号{}
在Java中也需要声明变量类型:
String name;
int age;
而python就不一样,python不需要声明类型,拿来即可使用。
最后把这些变量当作参数放在函数里面:
//C语言
void introduction(char name[10],int age){}
//Java
public void introduction(int age){}
#python
def introduction(self, age):
相信大家已经可以从中发现区别和联系了,最后讲一讲输出语句的区别:
printf("我的名字是%s\n",name);
在C语言中,printf() 用于格式化输出到屏幕。printf() 函数在 “stdio.h” 头文件中声明。当编译器遇到 printf() 函数时,如果没有找到 stdio.h 头文件,会发生编译错误。
另外,printf()的输出不会自动换行,因此我们需要在后面加上换行符\n
在Java中,输出语句是这样写的:
System.out.println("我今年" + age + "岁了");
不像C语言那样用%s,当然,也支持在输出时自动换行。
再来看看python:
print("我今年", age, "岁了")
输出语句更加便捷,而且支持输出时自动换行,这也是我喜爱python的原因之一。
如果我有哪里写的不够好,欢迎大家批评指正,谢谢!