面向对象编程之类与对象(C语言、Java和Python的对比学习)

对于初学者,我们首先要知道以下两个概念:

  • 面向过程与面向对象

不知道大家最初学的编程语言是不是C语言,如果学过C语言,应该知道C语言是一门面向过程的语言;而Java和Python从设计之初就已经是一门面向对象的语言;PHP语言可以同时应用面向过程和面向对象编程。

可以简单地理解为:面向谁就是以谁为中心,具体来说:

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

在这里插入图片描述
比如以动物而言:

动物吃饭是一个事件,睡觉是另一个事件。在编程序的时候我们关心的是某一个事件。而不是动物本身。我们分别对吃饭和睡觉编写程序。简单粗暴点就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。

对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。

比如拿我们早上起来这件事说明面向过程,粗略的可以将过程拟为:

  1. 起床
  2. 穿衣
  3. 刷牙洗脸
  4. 吃早餐

这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的原因之一。

如果我有哪里写的不够好,欢迎大家批评指正,谢谢!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.郑先生_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值