你好。
很幸运看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
对于你的问题我爱莫能助!
可能是你问的问题有些专业了。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
快过年了,
最后祝您全家幸福健康快乐每一天!
对楼上说:
看样你是没有做过项目。在实际应用中,并不总是需要带汉字库的LCD。带字库的LCD价格要贵得多,又贵,稳定性又不可靠,所以在产品中用得并不多。只有初学者或是参加电子设计竞赛才用带字库的LCD。当显示汉字不多的时候,多数使用不带汉字库的LCD。像12864的LCD,在什么应用场合需要随机应用大量汉字?
/ 转贴。不是我编程,用Proteus仿真效果很好 /
#include<reg51h>
#include<absacch>
typedef unsigned char uchar;
typedef unsigned int uint;
#define LLCD_CMD_WR PBYTE[0x10]
#define LLCD_CMD_RD PBYTE[0x11]
#define LLCD_DATA_WR PBYTE[0x12]
#define LLCD_DATA_RD PBYTE[0x13]
#define RLCD_CMD_WR PBYTE[0x20]
#define RLCD_CMD_RD PBYTE[0x21]
#define RLCD_DATA_WR PBYTE[0x22]
#define RLCD_DATA_RD PBYTE[0x23]
sbit busy=P0^1;
uchar code hz0[]=
{
0x00, 0x00, 0xf8, 0x88, 0x99, 0xea, 0x8c, 0xf8, 0x88, 0xcc, 0xab, 0x99, 0x88, 0xf8, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0xfe, 0x00, 0x00, 0x00, 0x00,
0x20, 0x30, 0xac, 0x63, 0x10, 0x00, 0x40, 0x42, 0x22, 0x22, 0x12, 0x1a, 0x26, 0x42, 0xc0, 0x00,
0x22, 0x23, 0x22, 0x12, 0x12, 0x00, 0x20, 0x21, 0x21, 0x21, 0x3f, 0x21, 0x21, 0x21, 0x20, 0x00,
0x10, 0x60, 0x01, 0x86, 0x60, 0x20, 0xd0, 0x48, 0x44, 0x43, 0x44, 0xc8, 0x30, 0x60, 0x20, 0x00,
0x04, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x7f, 0x80, 0x80, 0x84, 0x88, 0x87, 0x80, 0xe0, 0x00, 0x00,
0x10, 0x60, 0x01, 0xf6, 0x00, 0x10, 0xf8, 0x17, 0x34, 0x54, 0x14, 0x14, 0xf4, 0x04, 0x04, 0x00,
0x04, 0x04, 0xff, 0x00, 0x01, 0x01, 0x1f, 0x11, 0x13, 0x15, 0x51, 0x91, 0x7f, 0x11, 0x11, 0x00,
0x14, 0x24, 0x44, 0x84, 0x7c, 0x40, 0x30, 0xfc, 0x4b, 0x48, 0xf9, 0x4e, 0x48, 0x48, 0x08, 0x00,
0x10, 0x08, 0x06, 0x01, 0x03, 0x0c, 0x00, 0xff, 0x22, 0x22, 0x3f, 0x22, 0x22, 0x22, 0x20, 0x00,
0x00, 0x10, 0x10, 0x12, 0x14, 0x1c, 0x10, 0xf0, 0x9f, 0x10, 0x10, 0x10, 0x10, 0xf8, 0x10, 0x00,
0x00, 0x00, 0x40, 0x20, 0x10, 0x08, 0x06, 0x01, 0x00, 0x11, 0x26, 0x40, 0x20, 0x1f, 0x00, 0x00,
0x00, 0x10, 0x10, 0x10, 0x90, 0x70, 0x00, 0xff, 0x20, 0x60, 0x90, 0x08, 0x04, 0x00, 0x00, 0x00,
0x10, 0x10, 0x08, 0x06, 0x01, 0x40, 0x80, 0x7f, 0x00, 0x00, 0x01, 0x06, 0x0c, 0x18, 0x08, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x58, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
uchar code hz1[]=
{
0xfe, 0x02, 0x32, 0xca, 0x46, 0x20, 0x30, 0x2c, 0xe3, 0x24, 0x28, 0x10, 0x20, 0x20, 0x00, 0x00,
0xff, 0x02, 0x04, 0x43, 0x20, 0x11, 0x4d, 0x81, 0x7f, 0x01, 0x05, 0x09, 0x11, 0x30, 0x00, 0x00,
0x80, 0x88, 0x88, 0x88, 0xff, 0x88, 0x88, 0x88, 0x00, 0xfe, 0x02, 0x02, 0x02, 0xfe, 0x00, 0x00,
0x00, 0x10, 0x3c, 0x13, 0x10, 0x08, 0, 0x1c, 0x08, 0xff, 0x00, 0x08, 0x10, 0x0f, 0x00, 0x00,
0x00, 0x02, 0x82, 0x7a, 0x92, 0x02, 0x02, 0xfe, 0x02, 0x02, 0x02, 0xfa, 0x02, 0x02, 0x00, 0x00,
0x48, 0x46, 0x41, 0x40, 0x41, 0x46, 0x40, 0x7f, 0x48, 0x44, 0x43, 0x40, 0x41, 0x4e, 0x44, 0x00,
0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00,
0x00, 0x20, 0x7f, 0x20, 0x20, 0x20, 0x20, 0x3f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7f, 0x00, 0x00,
0x00, 0x02, 0x02, 0x02, 0x02, 0x82, 0x42, 0xfe, 0x06, 0x42, 0xc2, 0x82, 0x02, 0x03, 0x02, 0x00,
0x00, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x01, 0x07, 0x02, 0x00, 0x00,
0x80, 0x80, 0x80, 0x80, 0xbe, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xbe, 0x80, 0x80, 0x80, 0x00,
0x00, 0x40, 0x20, 0x10, 0x0e, 0x10, 0x20, 0x3f, 0x44, 0x44, 0x44, 0x44, 0x44, 0x40, 0x40, 0x00,
0x40, 0x40, 0x44, 0x44, 0x44, 0x44, 0xc4, 0xc4, 0x44, 0x44, 0x46, 0x46, 0x64, 0x60, 0x40, 0x00,
0x00, 0x20, 0x70, 0x38, 0x2c, 0x27, 0x23, 0x31, 0x10, 0x12, 0x14, 0x18, 0x70, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5b, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
uchar code hz2[]=
{
0x02, 0x02, 0xfe, 0x92, 0x92, 0x92, 0xfe, 0x02, 0x02, 0x7c, 0x84, 0x04, 0x84, 0x7c, 0x04, 0x00,
0x10, 0x10, 0x0f, 0x08, 0x08, 0x04, 0xff, 0x04, 0x22, 0x10, 0x09, 0x06, 0x09, 0x30, 0x10, 0x00,
0x00, 0x02, 0x1c, 0xc0, 0x30, 0x4c, 0x30, 0x0f, 0x08, 0xf8, 0x08, 0x08, 0x28, 0x18, 0x08, 0x00,
0x02, 0x5e, 0x43, 0x20, 0x20, 0x10, 0x08, 0x04, 0x03, 0x01, 0x06, 0x08, 0x30, 0x60, 0x20, 0x00,
0x04, 0x04, 0x04, 0x84, 0xf4, 0x2f, 0x04, 0x04, 0xe4, 0x0f, 0x04, 0xc4, 0x84, 0x04, 0x04, 0x00,
0x00, 0x02, 0x01, 0x00, 0xff, 0x00, 0x08, 0x04, 0x3f, 0x42, 0x41, 0x40, 0x40, 0x78, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
0x20, 0x30, 0x2c, 0x23, 0x20, 0x21, 0x36, 0x2c, 0x23, 0x20, 0x20, 0x23, 0x26, 0x3c, 0x28, 0x00,
0xe0, 0x00, 0xff, 0x10, 0xf4, 0x94, 0xff, 0x94, 0xf4, 0x08, 0xf4, 0x13, 0x92, 0x1a, 0xf6, 0x00,
0x00, 0x00, 0xff, 0x10, 0x08, 0x06, 0xff, 0x02, 0x04, 0x80, 0x4f, 0x20, 0x1f, 0x20, 0xcf, 0x00,
0x00, 0xfe, 0x02, 0x02, 0xf2, 0x12, 0x12, 0x12, 0x12, 0x12, 0xf2, 0x02, 0x02, 0xfe, 0x00, 0x00,
0x00, 0x7f, 0x40, 0x40, 0x47, 0x44, 0x44, 0x44, 0x44, 0x44, 0x47, 0x40, 0x40, 0x7f, 0x00, 0x00,
0x00, 0xfe, 0x02, 0xf2, 0x12, 0x12, 0xf2, 0x00, 0xf2, 0x12, 0x1a, 0xd6, 0x12, 0xf2, 0x02, 0x00,
0x20, 0x1f, 0x00, 0x3f, 0x10, 0x09, 0x45, 0x40, 0x2f, 0x20, 0x10, 0x0f, 0x10, 0x2f, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x58, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
uchar code hz3[]=
{
0x00, 0x00, 0x42, 0x44, 0x5c, 0x48, 0x40, 0xff, 0x40, 0x50, 0x48, 0x46, 0x64, 0x40, 0x00, 0x00,
0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xff, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x04, 0x00,
0x20, 0x38, 0xa7, 0x62, 0x10, 0x20, 0xa0, 0x6c, 0x6b, 0xaa, 0x2a, 0x3a, 0x26, 0xa0, 0x20, 0x00,
0x12, 0x13, 0x12, 0, 0x29, 0x25, 0x12, 0x12, 0x49, 0x85, 0x7f, 0x02, 0x0d, 0x18, 0x08, 0x00,
0x20, 0x10, 0xfc, 0x07, 0xf2, 0x20, 0x98, 0x8f, 0x54, 0xa4, 0x24, 0x54, 0xcc, 0x80, 0x80, 0x00,
0x00, 0x00, 0x7f, 0x00, 0x03, 0x54, 0x54, 0x4a, 0x2b, 0x25, 0x15, 0x12, 0, 0x09, 0x00, 0x00,
0x40, 0x42, 0xcc, 0x00, 0x04, 0x04, 0xe5, 0xb6, 0xac, 0xa4, 0xa6, 0xe5, 0x04, 0x04, 0x00, 0x00,
0x40, 0x20, 0x1f, 0x20, 0x40, 0x40, 0x5f, 0x4a, 0x4a, 0x4a, 0x4a, 0x5f, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, 0x42, 0x44, 0x5c, 0x48, 0x40, 0xff, 0x40, 0x50, 0x48, 0x46, 0x64, 0x40, 0x00, 0x00,
0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0xff, 0x04, 0x04, 0x04, 0x04, 0x04, 0x06, 0x04, 0x00,
0x20, 0x38, 0xa7, 0x62, 0x10, 0x20, 0xa0, 0x6c, 0x6b, 0xaa, 0x2a, 0x3a, 0x26, 0xa0, 0x20, 0x00,
0x12, 0x13, 0x12, 0, 0x29, 0x25, 0x12, 0x12, 0x49, 0x85, 0x7f, 0x02, 0x0d, 0x18, 0x08, 0x00,
0x10, 0x10, 0x92, 0x92, 0x92, 0xf2, 0x9e, 0x92, 0x92, 0x92, 0x92, 0x92, 0xfe, 0x10, 0x10, 0x00,
0x40, 0x20, 0x10, 0x0c, 0xfe, 0x45, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0xfd, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
void lcd_cmd_wr(uchar cmdcode,uchar f);
void lcd_data_wr(uchar ldata,uchar f);
void chech_busy(uchar f);
void lcd_hz_wr(uchar posx,uchar posy,uchar hz);
void lcd_str_wr(uchar row,uchar col,uchar n,uchar str);
void lcd_rol();
void lcd_init();
void delay(uint n);
void main()
{
while(1)
{
lcd_init();
lcd_str_wr(0,0,8,hz0);
delay(100);
lcd_str_wr(1,0,8,hz1);
delay(100);
lcd_str_wr(2,0,8,hz2);
delay(100);
lcd_str_wr(3,0,8,hz3);
delay(100);
lcd_rol();
delay(1000);
lcd_rol();
delay(1000);
}
}
void lcd_init()
{
uint i;
lcd_cmd_wr(0x3f,0);
lcd_cmd_wr(0xc0,0);
lcd_cmd_wr(0xb8,0);
lcd_cmd_wr(0x40,0);
lcd_cmd_wr(0x3f,1);
lcd_cmd_wr(0xc0,1);
lcd_cmd_wr(0xb8,1);
lcd_cmd_wr(0x40,1);
for(i=0;i<256;i++)
{
lcd_data_wr(0x00,0);
lcd_data_wr(0x00,1);
}
lcd_cmd_wr(0xb8+4,0);
lcd_cmd_wr(0xb8+4,1);
for(i=0;i<256;i++)
{
lcd_data_wr(0x00,0);
lcd_data_wr(0x00,1);
}
}
void lcd_cmd_wr(uchar cmdcode,uchar f)
{
chech_busy(f);
if(f==0) LLCD_CMD_WR=cmdcode;
else RLCD_CMD_WR=cmdcode;
}
void chech_busy(uchar f)
{
if(f==0) LLCD_CMD_RD;
else RLCD_CMD_RD;
while(busy);
}
void lcd_str_wr(uchar row,uchar col,uchar n,uchar str)
{
uchar i;
for(i=0;i<n;i++)
{
lcd_hz_wr(row,col,str+i32);
delay(50);
col++;
}
}
void lcd_hz_wr(uchar posx,uchar posy,uchar hz)
{
uchar i;
if(posy<4)
{
lcd_cmd_wr(0xb8+2posx,0);
lcd_cmd_wr(0x40+16posy,0);
for(i=0;i<16;i++) lcd_data_wr(hz[i],0);
lcd_cmd_wr(0xb8+2posx+1,0);
lcd_cmd_wr(0x40+16posy,0);
for(i=16;i<32;i++) lcd_data_wr(hz[i],0);
}
else
{
lcd_cmd_wr(0xb8+2posx,1);
lcd_cmd_wr(0x40+16(posy-4),1);
for(i=0;i<16;i++) lcd_data_wr(hz[i],1);
lcd_cmd_wr(0xb8+2posx+1,1);
lcd_cmd_wr(0x40+16(posy-4),1);
for(i=16;i<32;i++) lcd_data_wr(hz[i],1);
}
}
void lcd_data_wr(uchar ldata,uchar f)
{
chech_busy(f);
if(f==0) LLCD_DATA_WR=ldata;
else RLCD_DATA_WR=ldata;
}
void lcd_rol()
{
uchar i;
for(i=0;i<64;i++)
{
lcd_cmd_wr(0xc0+i,0);
lcd_cmd_wr(0xc0+i,1);
delay(10);
}
}
void delay(uint n)
{
uint i;
for(;n>0;n--)
for(i=500;i>0;i--);
}
可视化编程,亦即可视化程序设计:以“所见即所得”的编程思想为原则,力图实现编程工作的可视化,即随时可以看到结果,程序与结果的调整同步
可视化编程是与传统的编程方式相比而言的,这里的“可视”,指的是无须编程,仅通过直观的 *** 作方式即可完成界面的设计工作,是目前最好的Windows应用程序开发工具
可视化编程语言的特点主要表现在两个方面:一是基于面向对象的思想,引入了控件的概念和事件驱动;二是程序开发过程一般遵循以下步骤,即先进行界面的绘制工作,再基于事件编写程序代码,以响应鼠标、键盘的各种动作
可视化编程十问1
什么是可视化程序设计可视化(Visual)程序设计是一种全新的程序设计方法,它主要是让程序设计人员利用软件本身所提供的各种控件,像搭积木式地构造应用程序的各种界面
2
可视化程序设计有哪些优点可视化程序设计最大的优点是设计人员可以不用编写或只需编写很少的程序代码,就能完成应用程序的设计,这样就能极大地提高设计人员的工作效率
3
能够进行可视化程序设计的语言有哪些能进行可视化程序设计的语言很多,比较常用的有微软的VisualBasic、VisualC++、中文VisualFoxpro、Borland公司的Delphi等
4
可视化程序设计中有哪些基本概念主要的几个基本概念有表单、组件、属性、事件、方法等
5
什么是表单(Form)表单是指进行程序设计时的窗口,我们主要是通过在表单中放置各种部件(如命令按钮、复选框、单选框、滚动条等)来布置应用程序的运行界面
6
什么是组件所谓组件,就是组成程序运行界面的各种部件,如:命令按钮、复选框、单选框、滚动条等
7
什么是属性属性就是组件的性质
它说明组件在程序运行的过程中是如何显示的、组件的大小是多少、显示在何处、是否可见、是否有效8
属性可以分成哪几类属性可分成三类,设计属性:是在进行设计时就可发挥作用的属性;运行属性:这是在程序运行过程中才发挥作用的属性;只读属性:是一种只能查看而不能改变的属性
9
什么是事件事件就是对一个组件的 *** 作
如用鼠标点击一个命令按钮,在这里,点击鼠标就称为一个事件(Click事件)
10
什么是方法方法就是某个事件发生后要执行的具体 *** 作,类似以前的程序
例如当我们用鼠标单击“退出”命令按钮时,程序就会通过执行一条命令而结束运行,命令的执行过程就叫方法
面向对象程序设计1.历史回顾1967年挪威计算中心的KistenNygaard和OleJohanDahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,它被认为是第一个面向对象语言
20世纪70年代初,PaloAlto研究中心的AlanKay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80,Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-C,C,Self,Eiffl都产生了深远的影响
随着面向对象语言的出现,面向对象程序设计也就应运而生且得到迅速发展
之后,面向对象不断向其他阶段渗透,1980年GradyBooch提出了面向对象设计的概念,之后面向对象分析开始
1985年,第一个商用面向对象数据库问世
1990年以来,面向对象分析、测试、度量和管理等研究都得到长足发展
实际上,“对象”和“对象的属性”这样的概念可以追溯到20世纪50年代初,它们首先出现于关于人工智能的早期著作中
但是出现了面向对象语言之后,面向对象思想才得到了迅速的发展
过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言
汇编语言出现后,程序员就避免了直接使用0-1,而是利用符号来表示机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增加的复杂性
但是,如果软件系统达到一定规模,即使应用结构化程序设计方法,局势仍将变得不可控制
作为一种降低复杂性的工具,面向对象语言产生了,面向对象程序设计也随之产生
2.面向对象程序设计的基本概念面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递
通过这些概念面向对象的思想得到了具体的体现
1)对象对象是运行期的基本实体,它是一个封装了数据和 *** 作这些数据的代码的逻辑实体
2)类类是具有相同类型的对象的抽象
一个对象所包含的所有数据和代码可以通过类来构造
3)封装封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性
对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限
4)继承继承是让某个类型的对象获得另一个类型的对象的特征
通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性
5)多态多态是指不同事物具有不同表现形式的能力
多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度
6)动态绑定绑定指的是将一个过程调用与相应代码链接起来的行为
动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式
7)消息传递对象之间需要相互沟通,沟通的途径就是对象之间收发信息
消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息
消息传递的概念使得对现实世界的描述更容易
3.面向对象语言一个语言要称为面向对象语言必须支持几个主要面向对象的概念
根据支持程度的不同,通常所说的面向对象语言可以分成两类:基于对象的语言,面向对象的语言
基于对象的语言仅支持类和对象,而面向对象的语言支持的概念包括:类与对象、继承、多态
举例来说,Ada就是一个典型的基于对象的语言,因为它不支持继承、多态,此外其他基于对象的语言还有Alphard、CLU、Euclid、Mola
面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言本身往往吸取了其他语言的精华,而又尽量剔除他们的不足,因此面向对象的特征特别明显,充满了蓬勃的生机;另外一些则是对现有的语言进行改造,增加面向对象的特征演化而来的
如由Pascal发展而来的ObjectPascal,由C发展而来的Objective-C,C,由Ada发展而来的Ada95等,这些语言保留着对原有语言的兼容,并不是纯粹的面向对象语言,但由于其前身往往是有一定影响的语言,因此这些语言依然宝刀不老,在程序设计语言中占有十分重要的地位
4.面向对象程序设计的优点面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计
在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数
其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务
在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问
每个函数都可以具有它们自己的局部数据
下图显示了一个面向过程程序中函数和数据的关系
图1面向过程程序设计中函数和数据的关系示例这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证
面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和 *** 作紧密地连结在一起,并保护数据不会被外界的函数意外地改变
下图显示了一个面向对象程序中对象与函数和数据的关系
图2面向对象程序设计中函数和数据的关系示例比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的其他优点:1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度;6)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;7)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级
面对对象的程序设计方法在数据输入模块内部设计中,采用面向对象的设计方法
[6]面向对象的基本概念如下:对象:对象是要研究的任何事物
从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件
对象由数据(描述事物的属性)和作用于数据的 *** 作(体现事物的行为)构成一独立整体
从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为
在对内的 *** 作通常称为方法
类:类是对象的模板
即类是对一组有相同数据和相同 *** 作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为
类是在对象之上的抽象,对象则是类的具体化,是类的实例
类可有其子类,也可有其它类,形成类层次结构
消息:消息是对象之间进行通信的一种规格说明
一般它由三部分组成:接收消息的对象、消息名及实际变元
面向对象主要特征:封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性
封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的
封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象
继承性:继承性是子类自动共享父类之间数据和方法的机制
它由类的派生功能体现
一个类直接继承其它类的全部描述,同时可修改和扩充
继承具有传递性
继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)
类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复
继承不仅支持系统的可重用性,而且还促进系统的可扩充性
多态性:对象根据所接收的消息而做出动作
同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性
利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法
例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同
多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应
在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性
综上可知,在面对对象方法中,对象和传递消息分别表现事物及事物间相互联系的概念
类和继承是是适应人们一般思维方式的描述范式
方法是允许作用于该类对象上的各种 *** 作
这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性
通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征
面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学
对象是由数据和容许的 *** 作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象
而每继承性是对具有层次关系的类的属性和 *** 作进行共享的一种方式
所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统
按照BjarneSTroustRUP的说法,面向对象的编程范式:l决定你要的类;2给每个类提供完整的一组 *** 作;3明确地使用继承来表现共同点
由这个定义,我们可以看出:面向对象设计就是“根据需求决定所需的类、类的 *** 作以及类之间关联的过程”
面向对象设计方法的特点和面临的问题面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换
这是面向对象设计方法最主要的特点和成就
面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法
但是同原型方法一样,面向对象设计方法需要一定的软件基础支持才可以应用,另外在大型的MIS开发中如果不经自顶向下的整体划分,而是一开始就自底向上的采用面向对象设计方法开发系统,同样也会造成系统结构不合理、各部分关系失调等问题
所以面向对象设计方法和结构化方法目前仍是两种在系统开发领域相互依存的、不可替代的方法
以上就是关于鼠标坐标显示计算程序设计全部的内容,包括:鼠标坐标显示计算程序设计、利用单片机8031的程序设计汉字系统显示设计程序、可视化编程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)