1. 闲话编程
什么是编程,大部分编程语言有哪些特点,我想对于很多第一次接触编程妇女同志来说是懵逼的,别急,且听我一一道来。
先来看一个结构
- 语言层面
- 数据类型与运算符
- 变量
- 顺序结构
- 选择
- 循环
- 函数
- 自定义类型
- 继承
- 多态
- 系统层面
- 多线程
- I/O交互
- GUI
以上的内容,对于初学编程的同志来说我觉得够用了。从上面两个分类可以分成语言层面和系统层面,与此同时,我们基本可以划分两大类书籍,
- 一类只讲语言本身
- 另一类是用该语言与操作系统交互。
1.1 语言层面
- 数据类型
对于从语言层面来说,首先都会讲一个数据类型,什么是数据类型,比如我们数学里学的整数,小数(浮点数),布尔类型(YES/NO)字符串类型;用这些数干什么呢?是用来做一些运算,包括“加、减、乘、除、取余数、判断是非,求交、求并”等等。
- 变量 变量拿来干什么?是用来存储一个值,不好解释,上例子。
# pythona = 3 # 把3赋值给a,a现在的值是3b = 4 # 把4赋值给b,b现在的值是4c = a + b # 把a + b的值赋值给c,就是c = 3 + 4,即c现在的值是7print c # 打印c复制代码
其实变量就是用来存数据的,在编程中的“=”不是“等号”,叫“赋值”号,真正的“等号”这么写“==”;
// C++int a = 3;bool b = true;char *str = "hello wrold";float c = 3.0f;复制代码
# Pythona = 3b = Truec = 0.2d = "hello world"复制代码
我们可以看到,对于C++ 来说,我们必须要先告诉编译器,我们声明得的变量是什么类型,但是Python不用,直接a = 3就可以了用了,而不用int a = 3;Python的解释器会根据你给变量赋值的类型来推导出变量a的类型。
- 顺序、选择、和循环
一段代码怎么执行,是从上向下执行,如果遇到选择就会根据条件选择一条分叉继续执行,如果遇到循环就在循环条件一直循环执行。其实只要实现了顺序,选择和循环,就能实现人类所有的逻辑,也就是说,你的任何想法都能实现,这个特性我们称之为:图灵完备。
- 函数
函数的出现是把一些通用的功能放在一起,每次用的时候用一下,比如说,你要洗衣服,你不能每次弄一堆铁皮,一个发电机做一个临时的洗衣机,然后洗一次,这个洗衣机就废了。我们需要复用,就是这次能用,下次也能用,我能用,我拿给别人也能用,正是因为有了复用的概念,所以才出现了函数,有了函数我们觉得这个粒度还是太小了,我们需要一些更大的模块,所以有了自定义类型,自定义类型里定义了一堆堆属性和行为,属性就是变量,比如年龄、性别。行为就是一对函数,来描述吃喝玩乐飞檐走壁之类的。
- 自定义类型
为什么有自定义类型?因为目前给的类型不够用,在C语言里会有结构体,面向对象流行之后,我们开始说Class(类)。类其实就是自定义类型,比如人是一个自定义类型,鸟,车、马、动物。总之现实生活中天上飞的、地上跑的,每个东西都是有类型的。
那么没有自定义类型可以吗?我觉得可能可以,但是有了自定义类型以后,很多事情变得很自然,理解起来很容易,所以有了理解上的需求,所以自定义类型也应运而生。
- 继承 这是两个面向对象里的概念,什么叫面向对象,就是万物皆对象。继承是什么意思,是一种“is-a”的关系,比如说:金丝猴是一种猴,草泥马是一种驼(羊驼)、航空母舰是一种船、流氓是一种人。这都是继承关系,继承了什么呢。
比如说猴子都有尾巴,那金丝猴必定有尾巴,猴子作为金丝猴的父类或是基类,一定有猴子与生俱来的特点。而金丝猴也有一些自己的本身的特点,比如毛是金色的。
转化成程序语言来说我们通过一个类图来展现一下:
这是一个类图,怎么看的,箭头三角指的是父类、箭头尾端的是子类。
这个例子可能也不太合理,但将就看吧,我也懒得想了。Golden Monkey是金丝猴,macaque是猕猴; 我们都知道他们都是猴,都具备猴子的特性,比如:有尾巴、有年龄,都有吃、跳、爬树的行为,这是他们作为猴子的共性。但是他们也有个性,就是金丝猴是金色的,猕猴是灰色的。
- 多态 有继承才有多态,没有继承肯定没有多态的概念,多态是用父类做指代,比如你说有个人在写作业,我问你这个人是谁,你说李四,就表示李四在写作业,你说这个人是张三,那就是张三在写作业。
举个例子吧
# 伪代码猴子 a = create("金丝猴");a.eat();猴子 b = create("猕猴");b.eat();复制代码
这段代码什么意思,就是有个猴子a,然后明确告诉你它是个金丝猴,那这个猴子吃,其实就是金丝猴在吃,对于b呢就是猕猴在吃。
所以说多态有什么用,就是当我们有很多猴子吃饭,或人写作业这种事要处理的时候,我们就可以一直用人做作业来描述,只需要换这个人和实际人之间的映射关系就好了,比如说当前这个人是张三,当前这个人是李四。
1.2 系统层面
关于系统层面,不想讲的太多,怕各位女同志消化不了,简单说说吧; 你熟悉了编程语言之后,你总想写点好玩的东西吧,你总不能都写一些算闰年、算最大值、求和这种无聊的代码,那你要怎么才能玩出花呢?
你是不是想写一个带图形界面(GUI)的程序,你是不是想写一个能网络通讯的程序(I/O)。这都会涉及到多线程的概念。
- 多线程 啥叫多线程,理解多线程先得知道CPU怎么工作的,CPU是一个处理器,每隔一段时间就会处理一个任务。比如有个任务队列:吃饭、打游戏、喝水、聊天。
然后CPU有个叫分时的概念,就比如把一分钟分成了60秒,第一秒:吃饭、第二秒:打游戏、第三秒:喝水、第四秒:聊天、第五秒:吃饭、第六秒:打游戏、第七秒:喝水、第八秒:聊天 。。。
你将看到一个什么样的结果:你感觉吃饭、打游戏、喝水、聊天是同时进行的。如果把这个时间粒度从一秒缩减到一毫秒,你更加感觉这四件事是同时的。所以天下武功,唯快不破,就是快到让你反应不过,以为是同时发生的,这就是为什么你聊天的时候能听歌、听歌的时候能上网,什么事都不耽误。而每一个人任务我们目前粗浅的认为是在一个线程里执行的,而通常程序启动都会有第一个线程,我们称之为主线程、对于图形类程序来说,这个主线程是GUI(跟显示有关的)线程,其他的线程我们可以称之为:“后台线程”,就是俗称的跑在后台的线程。
好了,说了这么多的废话,这篇文章的目的主要是让你们在编程整体上建立一个概念,所有的编程语言,不管是C Java Python C# 都会有这些共性,当然想继承里提到的,他们也有他们自己的个性。ok,下一章,我们开始从Python的数据类型开始讲起。