370 likes | 527 Views
升级到. 文字界面程序. 图形界面软件. 《 可视化程序设计 》. 课程介绍. 《 可视化程序设计 》. 课程名称: 主讲人: 课时: 课程简介: 课程目的:. 闫广明,联系方式:机电学院 317 室. 总学时: 32 ,上课: 32 ,上机: 0. 本课程主要介绍基于 图形界面 下的 C++ 语言程序设计 和开发软件的使用。. 使学生了解流行软件开发方法, 掌握可视化程序的开发流程, 学会编写具有图形界面的程序。. 本课程最终成绩划分. 总分: 100 分 平时分 + 作业分: 40 分 最终大作业: 50 分
E N D
升级到 文字界面程序 图形界面软件 《可视化程序设计》
课程介绍 《可视化程序设计》 • 课程名称: • 主讲人: • 课时: • 课程简介: • 课程目的: 闫广明,联系方式:机电学院317室 总学时:32,上课:32,上机:0 本课程主要介绍基于图形界面下的 C++语言程序设计和开发软件的使用。 使学生了解流行软件开发方法,掌握可视化程序的开发流程,学会编写具有图形界面的程序。
本课程最终成绩划分 总分:100分 平时分+作业分:40分 最终大作业:50分 创新软件设计:10分 根据所学内容创性性的设计一个具有一定实用功能的软件,根据功能水平评分,最多不超过10分。
C++ Builder 平时分考查办法 如发现以下情况者,每次减平时分4分,最多减20分 1、玩游戏,听歌,看视频或小说等; 2、上网; 3、不学习; 4、缺席; * 迟到或早退一次扣2分。 每次课随机性课堂作业,并要求上传最终成果。如发现不上传者每次扣除作业分4分,作业总分20。
教学用软件介绍 • Borland C++ Builder 6 C++ Builder是Borland公司的一款可视化RAD工具。 RAD:Rapid application development,快速开发工具。 基于组件的先进程序设计技术使开发可视化软件向搭积木一样简单。 CBuilder能够开发基本软件,网络软件、数据库软件、工控软件等各类应用软件。
本次课内容 • 1、为什么要学习可视化编程? • 2、为什么学习C++ Builder,而不是其它可视化编程工具? • 3、必须得先学习C++ 才能学习C++ Builder吗? • 4、如何学好C++ Builder? • 5、面向对象编程基础知识。
课堂总结 • 本节课需要掌握OOP的思想和其中关键概念的代码化表达方式。 • 课后作业:阅读教材第10章,加深对OOP的印象和理解。
工业计算机 1、为什么要学习可视化编程? • 人机界面软件用可视化编程工具很容易实现。
主菜单 主工具栏 控件页 当前代码窗口 对象窗口 当前可视化编辑窗口 当前对象属性窗口
2、为什么学习C++ Builder, 而不是其它可视化编程工具? • 除C++Builder外,还有VB,VC,Delphi,.Net等 • VB, Delphi的语法没有学习过; • VC 不易上手,不适合做快速应用开发; • .Net强调软件结构大于功能,不利于非计算机专业学生学习。
3、必须得先学习C++ 语言才能学习C++ Builder吗? • 不是必需的 • C++是一种面向对象的C语言,是对原C语言的扩充,只要能够理解面向对象的基本概念和基本使用方法就可以直接学习C++ Builder了。
4、如何学好C++ Builder? • 1、兴趣是最好的老师。 • 2、广泛涉猎计算机的各个方面知识,日久天长你就会知道C++ Builder能够为你做什么了。 • 3、多看,多编程序,熟能生巧。
5、面向对象编程基础知识 1、什么是面向对象编程(OOP)? 2、OOP有什么好处? 3、OOP需要哪些基础知识?
1、什么是面向对象编程(OOP)? • OOP:Object-Oriented Programing • 是以对象(Object)为中心,以事件(Event)作为执行功能的依据,以方法(function)来响应事件完成功能的一种程序设计思想,这种思想是为了模拟现实世界完成一个任务的过程。 (举例子说明)
一个任务:人饿了要吃饭 • 对象:人 • 事件,饿了 • 方法:吃饭 • 课后作业:举出一个任务例子,并写出其中涉及到的对象,事件,方法。
2、OOP有什么好处? 1. 提高生产效率。表现在:程序重用共享 2. 降低维护复杂性。表现在:程序模块化 3. 开发大型软件。主要表现在: •抽象模型更接近现实世界。 •模型与程序易于理解 •程序具有重用性和模块化 •软件易于维护
OOP的实现 • OOP为了能更加真实模拟现实世界的对象概念,引入了类,对象,抽象,封装,继承,派生等手段实现对现实世界模拟,进而来完成一定的任务或功能。 • 下面我们依次看一下这六个概念的意思:
类和对象的基本概念 • 类(Class)是对一类具有相同本质特征和功能的 对象(Object)的统称; • 在OOP语言C++中实现类和对象的方法: 类名 对象名; • 例如:Humen ZhangSan,LiuBei;//定义了两个Humen类变量ZhangSan,LiuBei
类和对象的定义 • 学习提示: 对象的定义形式与C语言中变量定义一致: • int i,j; 对比Humen ZhangSan,LiuBei; • 区别: • int在c语言中预先定义好了,可以直接用; • Humen这个类型需要人为定义后才可使用; (与C语言中的结构体一样)
抽象(abstract) 抽象是对具体任务中的对象进行概括,总结出这一类对象的本质特征和功能并描述命名的过程。 • 在OOP中,抽象有两种: • 数据抽象:描述某类对象的属性或状态(对象相互区别的物理量,如:学生学号,身高)。 • 功能抽象:描述某类对象的共有的特征行为或具有的功能,(如:人能走,跑,吃。) • 抽象的实现:通过具有OOP的某种语言来实现。
抽象实例——钟表 • 数据抽象:当前时间,包括: 小时(hour), 分钟(minute), 秒(second) • 功能抽象: 现在几点了? 看看时间(ShowTime);钟表走时不准了?对表(SetTime); • 命名:具有以上特征和功能的对象统称:钟表类(Clock)
抽象的实现:用C++语言 数据抽象的C++语言实现: int hour; int minute; int second; 功能抽象的C++语言实现: void setTime(int newH, int newM, int newS);void showTime(); 命名:具有以上特征和功能的对象统称:Clock 因为没有上机练习,所以第一次课讲到这里
抽象实例——人类 • 数据抽象: ID, Name , Sex , BirthDay, Height • 功能抽象:生物属性角度:Run( ) , Step( ) , Eat( ) , … 社会属性角度:Work( ) , Study( ) , doHomeWork() ,… • 命名:人类(Humen)
封装 (Encapsulate) 将抽象出来的数据、功能合为一个整体,并规定访问权限。 • 封装后的数据和功能统称为成员(Member); • 封装的实现:OOP语言中实现 • 例子:
封装 这样我们就完成了一个Class的概念性定义,Ready to Use 封装的C++语言实现 class Clock { int hour; int minute; int second; void setTime(int newH, int newM, int newS); void showTime(); }
对象的使用方法 • 对象的使用方法与结构体变量非常相似;例子: • Clock *myClock; myClock->ShowTime(); //我想看看时间myClock->SetTime(11,30,00); //我要对表 • myClock->Hour=11; • // 等等,你能这样做么? • 想一想:你有一块钟表,为了对表,把表壳卸下来,手动拨动时针,分针,秒针来对表??
类内成员的使用限制 • 由于有些对象的内部成员不需要被外部访问,否则可能产生意外。 • 所以需要隐藏起来,不被外部使用,在C++语言中给我们提供这个机制:public, private,protected • public:用public 定义的成员可以被外部访问。 • Private:用private定义的成员不可以被外部访问。 • Protected:讲继承的时候再说。
抽象实例——钟表类 class Clock { void setTime(int newH, int newM, int newS); void showTime(); int hour,minute,second; }; //这里要学习定义类方法 public: // 公有成员,可以被外部过程调用 private: // 私有成员,只能被类内函数使用
加入访问权限限制后使用类的方法 • Clock *myClock; myClock->ShowTime(); //我想看看时间myClock->SetTime(11:30:00); //我要对表 • myClock->Hour=11; //上一行编译出错,私有成员不允许访问
继承(inherit)的概念 • 钟表 有很多种:例如:电子表,手表,无论名称怎样,都具有钟表的基本特征和功能,我们用术语说 电子表是从钟表继承来的。 手表是从钟表继承来的。 对于人而言:孩子从父母那里继承(遗传)了DNA。 • 继承的C++语言表现: 子类名 : public 父类名 { 类定义代码 }; • 例如: Watch: public Clock { 类定义代码 }; • //功能:定义了一个Clock类的子类:Watch; • //Watch会从Clock继承其public成员和protected成员,但是不能继承其私有成员。
继承的概念(续) • 例如: Watch: public Clock { … };// 定义了一个Clock类型的子类Watch; • Watch *myWatch; • myWatch->Showtime(); //public, OK • myWatch->SetTime(12,00,00); //public, OK • myWatch->minute=34; // private,编译出错
解决私有数据继承问题 • 实例: class Clock { public: void setTime(…); void showTime(); private : int hour,minute,second; }; protected // 只能被继承,不能被外界访问
派生(derive)的基本概念 • 概念解释:孩子从父母那里继承了一些特性,但是孩子还有自身的区别与父母的一些特性和功能。相当于人类遗传学中的变异特性。 • 派生的OOP语言实现: • 例子见下页:
类的派生举例 class Watch : public Clock { private: int Month,Day; // 我的手表可显示月日 public: void ShowMonthDay(); void SetMonthDay(int NewMon, int NewDay); }
派生的使用例子 • 例如: Watch: public Clock { … };// 定义了一个Clock类型的子类Watch; • Watch *myWatch; • myWatch->Showtime(); // 从父类继承来的,OK • myWatch->ShowMonthDay(); // 这回 myWatch有新功能喽! • myWatch->hour=11; // 编译出错,从父类继承的// protected成员不能被外部访问,只能在自身的// 函数内部来使用;
OOP编程例子 • 张三带着手表,要对表,时间为14:56:00. • OtherHumen public Humen{ public myWatch;} • OtherHumen *ZhangSan; • ZhangSan->myWatch->SetTime(14,56,00); • 习题:李四看时钟?