面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。
面向对象程序设计的三大特征是多态(Polymorphism)、继承(Inheritance)、封装(Encapsulation)。
1、多态
多态核心的思想就是,父类的引用能够指向子类的对象,或者接口类型的引用能够指向实现该接口的类的实例。多态会这样的原因是因为子类就是父类。
2、继承
Java是单继承的,这一点和C++有所不同,这也就意味着,一个类只能继承于一个类,被继承的类叫父类,或者是叫基类baseclass,继承的类叫子类。
Java当中的继承使用关键字extends。可是,一个类能够实现多个接口,多个接口之间用逗号进行分割。实现接口使用关键字implements。
3、封装(Encapsulation)
封装比较的简单,类包含了方法和数据,将方法和数据放在一个类当中,就构成了封装。封装的优点:将变化隔离,便于使用,提高重用性,提高安全性;封装的缺点:将变量等使用private修饰,或者封装进方法内,使其不能直接被访问,增加了访问步骤与难度!
面向对象程序设计的六大基本原则:
1、单一职责原则
不要存在多于一个导致类变更的原因,即一个类只承担一个职责。
2、开放-封闭原则
对扩展开放,对修改封闭。无论模块多么封闭,都会存在一些无法对之封闭的变化,既然不能完全封闭,我们必须对于自己设计的模块应该对哪种变化封闭做出选择,必须先猜测出最有可能发生的变化种类,然后构造抽象来隔离这些变化。
3、迪米特原则
一个对象应该对其他对象有最少的了解,减少类与类之间的耦合。如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用。类与类之间的耦合越弱,越有利于复用,一个处于弱耦合的类被修改,不会对有关系的类造成波及。
4、依赖倒转原则
上层模块不要依赖底层模块,它们都要依赖于抽象。抽象不能依赖于细节,细节要依赖于抽象。面向接口编程,不要面向实现编程。
5、里氏替换原则
子类型必须能够替换掉它们的父类型。只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正的被复用,而子类也能够在父类的基础上增加新的行为。
6、接口隔离原则
客户端不应该依赖于它不需要的接口,一个类对一个类的依赖应该建立在最小的接口上。不要让与自己无关的修改影响到自己功能模块的变化。
《面向对象程序设计》课程针对没有或很少编程经验的在职人员,介绍使用C#编写Windows桌面应用程序的基本技术,让学习者了解面向对象软件基础理论知识, 并培养出基本的软件开发技能,同时可以学以致用,应用软件技术解决一些简单的实际问题。#include<iostream.h>#include<string.h>
#include<fstream.h>
class stu
{
char name[20]
double math,chinese,english,average,sum
public:
stu()
{
}
stu(char n[20],double ma,double chin,double eng)
{
strcpy(name,n)
math=ma
chinese=chin
english=eng
}
double getsum()
{
sum=chinese+english+math
return sum
}
double getaver()
{
average=getsum()/3
return average
}
friend void main()
}
void main()
{
cout<<"请选择您需要的 *** 作!"<<endl
cout<<" *** 作:"<<endl
cout<<"(0)数据录入"<<endl
cout<<"(1)增加人员"<<endl
cout<<"(2)删除人员"<<endl
cout<<"(3)修改数据"<<endl
cout<<"查询:"<<endl
cout<<"(4)按总成绩查询"<<endl
cout<<"(5)按姓名查询"<<endl
cout<<"(6)输出所有学生的数据"<<endl
cout<<"成绩名词"<<endl
cout<<"(7)按总分查询排名"<<endl
cout<<"(8)按语文查询排名"<<endl
cout<<"(9)按数学查询排名"<<endl
cout<<"(y)按英语查询排名"<<endl
cout<<"选择相关 *** 作请输入相对的括号里的阿拉伯数字!"<<endl
char pchar w
stu *s[50]
ofstream *file[50]
int i=0
int j=0
bool flag2=0
do
{
cin>>p
if((p>='0'&&p<='10'))
flag2=1
else
cout<<"指令错误!请重新输入:"<<endl
}while(flag2==0)
do
{
switch(p)
{
case '0':
{
char c
char name[20]double math,chinese,english
do{
cout<<"请输入姓名"<<endl
cin>>name
cout<<"请输入数学成绩:"<<endl
cin>>math
cout<<"请输入语文成绩:"<<endl
cin>>chinese
cout<<"请输入外语成绩:"<<endl
cin>>english
file[j]=new ofstream("d:\\document",ios::ate)
*file[j]<<"姓名"<<name<<"数学成绩"<<math<<"语文成绩"<<chinese<<"外语成绩"<<english<<endl
j++
s[i]=new stu(name, math, chinese, english)
i++
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl
cin>>c
flag2=0
do
{
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl
cin>>c
}
else
flag2=1
}while(flag2==0)
}while(c=='y')
break
}
case '4':
{
double tchar c
do
{
int flag1=0
cout<<"请输入你要查询学生的总成绩"<<endl
cin>>t
for(int q=0q<iq++)
{
if(s[q]->getsum()==t)
{
flag1=1
cout<<"您要查询的学生是:"<<(*s[q]).name<<endl
}
}
if(flag1==0)
cout<<"对不起!您要查询的学生不存在!"<<endl
cout<<"您想继续查询吗?(y/n)"<<endl
cin>>c
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl
cin>>c
}
}
while(c=='y')
break
}
case '5':
{
char n[20]int j=0char c
do{
int flag=0
cout<<"请输入你要查询的学生姓名"<<endl
cin>>n
for(int j=0j<ij++)
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1
cout<<"您要查询的学生是:"<<(*s[j]).name<<endl
cout<<(*s[j]).name<<"的总成绩成绩是"<<(*s[j]).getsum()<<endl<<"平均成绩是:"<<(*s[j]).getaver()<<endl
}
}
if(flag==0)
cout<<"对不起!您要查询的学生不存在!"<<endl
cout<<"您想继续查询吗?(y/n)"<<endl
cin>>c
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl
cin>>c
}
}
while(c=='y')
break
} 还有一部分。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)