面向对象思想编程
2013-05-18 11:03
393 查看
1.一切都是对象;
2.属性,行为,关系 关系只有四种(1关联;2继承,泛化。3依赖;4实现;)
3.符合需求(现实)(这一点很重要;写代码时候一个要考虑是否符合现实);
例题:学院教师信息管理系统
1,查询每个学院有多少教师
2.浏览每个教师信息;
3.按姓名查找某个教师;
有这么三个要求;我们要分析一个需求,OOA过程
我们要从里面找出可以作为类 或者属性的词;
一般我们用名词动词法;就是从需求里面找出名词和动词,一般名词可以作为类或者属性。动词可以作为行为;
在上面需求中我们找到这么几个名词:学院,教师,姓名,信息(注意这是一个泛性词,具有泛性,写文档时候这里要写出具体的信息,如,姓名,性别,等等;)
那我们来判断一下名词中哪些可以为属性哪些为类
属性原则:
1原子性
2从属性
属性原则可以判断出 姓名 为属性,因为它有上面两中特性;
学院和教师为类;
想想学院和教师是什么关系?关系只有四种(1关联;2继承,泛化。3依赖;4实现;)
关联关系:属于,拥有;例如像学院和教师就是关联关系
继承关系:包含,层次;
依赖关系:相互影响的关系
判断关联和继承关系;
判断继承;Animal 和dog
Animal is a dog 错误
dog is a Animal 正确 像这样一个成立一个不成立 就是继承关系;
再如 学院 和 教师
学院是一个教师 错误
教师是一个学院 错误 所以他们不是继承关系
关联 :导航性
多重性
角色性
所以他们是关联关系 学院 和 教师 一对多 OOA
现在下面就是实现代码的过程了 OOD;
class School
{
private string _name;
//构造函数
public School(string name)
{
_name=name;
_teachers =new List<Teacher>();
}
//因为一个学院有很多教师,我们把教师放在;一个List集合中;
private List<Teacher> _teachers;
//实现问题1,查询学院教师个数
public int GetTeacherConnt()
{
return _teachers.Count;
}
//接受一个教师;
public void AcceptTeacher(Teacher teacher)
{
_teachers.Add(teacher);
}
------方法一;错误示范代码---------------------------------------------------------------
//浏览教师信息 明显是一个集合
public List<Teacher> Teachers
{
get{ return _teacher;}
}
}
-------------------------------------------------------------------------
-------方法二:错误示范代码--------------------------------------------------------------
public IEnumable<Teacher> Teachers
{
get{ return _teacher;}
}
---------------------------------------------------------------------
------方法三:正确做法-----------------------------------------------
public IEnumerable<Teacher> Teacher
{
get
{
foreach(Teacher t in _teacher)
{
yiled return t;
}
}
}
------------------------------------------------------------------------
----正确方法四:------------------------------------------------------
//只读
public System.Collections.ObjectModel.ReadOnlyCollection<Teacher> Teachers
{
get
{
return _teachers.AsReadOnly();
}
}
-------------------------------------------------------------------------
//教师类
class Teacher
{
//一个教师从属于一个学院,所以这里不是集合,是一个;学院不能随便更改,private
private School _school;
privarte string _name;
public sring Name
{
get{return _name;}
set{ _name=value}
}
//构造函数
public Teacher(string name , School school)
{
_name=name;
_school=school;
_school.AcceptTeacher(this); //在构造教师的时候就要将教师加到所在学院的teachers集合中;
}
}
//主函数;
static void main ()
{
School soft=new School("软件学院");
School base=new School("基础学院");
Teacher teach1=new Teacher("石臻臻",soft);
//执行查询就可以;
soft.GetTeacherCount();
//浏览教师的信息
(这里应该怎么写代码?我们可以在School中给_teachers写一个属性)
若如方法一那样写代码,就会有问题,不符合现实需求,因为我们把私有的_teachers公有了,可以随便添加教师了
base.Teachers.Add("石臻臻");
这样一行代码之后,试问石臻臻这个教师到底是哪一个学院的?这不不知道的不明确的;所以这样写代码不行;不能让它有Add方法;因为List是派生于Ienumable的;Ienumable没有Add方法;所以看方法二;
但是,用方法二就可以了吗?虽然Ienumable没有Add方法了,但是我可以将它强制转换成List<>类型;然后调用Add()方法;所以 这是没用的;
正确做法是方法三;迭代每个教师返回;
}
2.属性,行为,关系 关系只有四种(1关联;2继承,泛化。3依赖;4实现;)
3.符合需求(现实)(这一点很重要;写代码时候一个要考虑是否符合现实);
例题:学院教师信息管理系统
1,查询每个学院有多少教师
2.浏览每个教师信息;
3.按姓名查找某个教师;
有这么三个要求;我们要分析一个需求,OOA过程
我们要从里面找出可以作为类 或者属性的词;
一般我们用名词动词法;就是从需求里面找出名词和动词,一般名词可以作为类或者属性。动词可以作为行为;
在上面需求中我们找到这么几个名词:学院,教师,姓名,信息(注意这是一个泛性词,具有泛性,写文档时候这里要写出具体的信息,如,姓名,性别,等等;)
那我们来判断一下名词中哪些可以为属性哪些为类
属性原则:
1原子性
2从属性
属性原则可以判断出 姓名 为属性,因为它有上面两中特性;
学院和教师为类;
想想学院和教师是什么关系?关系只有四种(1关联;2继承,泛化。3依赖;4实现;)
关联关系:属于,拥有;例如像学院和教师就是关联关系
继承关系:包含,层次;
依赖关系:相互影响的关系
判断关联和继承关系;
判断继承;Animal 和dog
Animal is a dog 错误
dog is a Animal 正确 像这样一个成立一个不成立 就是继承关系;
再如 学院 和 教师
学院是一个教师 错误
教师是一个学院 错误 所以他们不是继承关系
关联 :导航性
多重性
角色性
所以他们是关联关系 学院 和 教师 一对多 OOA
现在下面就是实现代码的过程了 OOD;
class School
{
private string _name;
//构造函数
public School(string name)
{
_name=name;
_teachers =new List<Teacher>();
}
//因为一个学院有很多教师,我们把教师放在;一个List集合中;
private List<Teacher> _teachers;
//实现问题1,查询学院教师个数
public int GetTeacherConnt()
{
return _teachers.Count;
}
//接受一个教师;
public void AcceptTeacher(Teacher teacher)
{
_teachers.Add(teacher);
}
------方法一;错误示范代码---------------------------------------------------------------
//浏览教师信息 明显是一个集合
public List<Teacher> Teachers
{
get{ return _teacher;}
}
}
-------------------------------------------------------------------------
-------方法二:错误示范代码--------------------------------------------------------------
public IEnumable<Teacher> Teachers
{
get{ return _teacher;}
}
---------------------------------------------------------------------
------方法三:正确做法-----------------------------------------------
public IEnumerable<Teacher> Teacher
{
get
{
foreach(Teacher t in _teacher)
{
yiled return t;
}
}
}
------------------------------------------------------------------------
----正确方法四:------------------------------------------------------
//只读
public System.Collections.ObjectModel.ReadOnlyCollection<Teacher> Teachers
{
get
{
return _teachers.AsReadOnly();
}
}
-------------------------------------------------------------------------
//教师类
class Teacher
{
//一个教师从属于一个学院,所以这里不是集合,是一个;学院不能随便更改,private
private School _school;
privarte string _name;
public sring Name
{
get{return _name;}
set{ _name=value}
}
//构造函数
public Teacher(string name , School school)
{
_name=name;
_school=school;
_school.AcceptTeacher(this); //在构造教师的时候就要将教师加到所在学院的teachers集合中;
}
}
//主函数;
static void main ()
{
School soft=new School("软件学院");
School base=new School("基础学院");
Teacher teach1=new Teacher("石臻臻",soft);
//执行查询就可以;
soft.GetTeacherCount();
//浏览教师的信息
(这里应该怎么写代码?我们可以在School中给_teachers写一个属性)
若如方法一那样写代码,就会有问题,不符合现实需求,因为我们把私有的_teachers公有了,可以随便添加教师了
base.Teachers.Add("石臻臻");
这样一行代码之后,试问石臻臻这个教师到底是哪一个学院的?这不不知道的不明确的;所以这样写代码不行;不能让它有Add方法;因为List是派生于Ienumable的;Ienumable没有Add方法;所以看方法二;
但是,用方法二就可以了吗?虽然Ienumable没有Add方法了,但是我可以将它强制转换成List<>类型;然后调用Add()方法;所以 这是没用的;
正确做法是方法三;迭代每个教师返回;
}
相关文章推荐
- 面向对象思想(面向对象是一组思维方法、分析方法和编程方法的集合,当然不是最终的结果。”)
- 编程思想:面向对象和面向过程
- Android编程思想,面向对象程序设计第四篇——继承(上)重复代码放在基类
- 编程思想:面向对象和面向过程
- 理解Java面向对象的程序设计思想-Java基础-Java-编程开发
- Android编程思想,面向对象程序设计第一篇——设计模式6个原则
- 编程思想:面向对象和面向过程
- [置顶] 编程思想:面向对象和面向过程
- 在VB编程中使用面向对象思想
- 封装,面向对象设计编程思想
- 个人编程思想理解的片段(主要是面向对象的,参考了许多人的观点,还不成熟,没形成系统,请大家多指点)
- 【设计分享】一个面向对象思想的perl编程实例
- 火星车(面向对象思想编程)
- 编程思想:面向对象和面向过程
- 编程思想:面向对象与面向过程
- 什么是对象,什么是类,什么是面向对象的编程语言,什么是面向面向对象的编程思想?
- 【学习java编程思想】day_1面向对象程序设计的方法
- 面向对象思想编程
- Android编程思想,面向对象程序设计第五篇——继承(下)业务逻辑抽象化
- Android编程思想,面向对象程序设计第六篇——封装(上)布局模块化