我是一名C#编程学生,虽然我已经在编程学习了几年,而且学习的内容超出了课程的教学范围,这正是我正在做的事情,所以我得到了充分的准备进入工作环境.这个特殊课程根本不是OOP,实际上是下一堂课,但对于这个项目,老师说他不介意我们是否超越并在OOP中完成了项目(事实上你不能得到A在他的班上,除非你无论如何都要超越自己.)
该项目(此时)读取XML文件,逐字节,将元素标记存储到一个数组,将数据值存储到另一个数组.我和他一起战斗(鉴于处理XML的.net框架)但这是一场失败的战斗.他希望我们在不使用.net XML的情况下编写代码.
他确实为这个程序提供了一个OOP示例(他最初用Java编写,移植到C++,然后从C++移植到C#)
在他的例子中,他有三节课.第一,XMLObject,其中包含阵列,准构造,获取和设置方法(未属性,我打算在我的版本而定),以及用于将所述的方法<和>要被存储在阵列标签(和输出到控制台,如果需要.)
第二堂课是一parseXML堂课.在这一个中,他有一些字段可以跟踪行数,文件偏移量,标记偏移量以及用于保存元素和数据的字符串.同样,他有getter和setter方法,几个解析不同东西的解析方法,以及一个使用其他解析方法的通用解析方法(在这里将它们组合起来).其中一些方法调用XMLObject类的方法,并将解析后的元素和数据值发送到各自的数组.
他拥有的第三个类是没有字段的类,有两个方法,一个用于执行ATOI,另一个用于将一部分文件流转储到控制台.
我知道我们基本上构建了一个效率较低的版本,已经包含在.net框架中.我已经向他指出了这个问题并被告知"不要使用.net的XML类,讨论结束",所以让我们都同意让这一个人独自一人.
我的问题是,那些真的应该是3个独立的课程.解析类不应该从XML对象类继承,还是只能在XML对象类中编码,ATOI和转储方法是否也不应该属于这两个类中的一个?
这对我来说很有意义,如果解析类的人生目标是解析XML文件,并存储元素和数据字段的数组,它应该是在同一个班级,而不是孤立,并且具有通过getter和setter方法来做到这一点(或者我将要做的版本中的属性).我不明白为什么数组需要从实际给它们存储什么的解析方法中封装起来.
任何帮助将不胜感激,因为我仍在设计这个,并希望至少尽可能接近"正确"(我知道它是一个相对术语)OOP形式.
Ste*_*ven 10
一般规则是我们根据它所拥有的职责数来计算一个类的大小:
一个班级应该承担一个责任:改变的一个原因.
在我看来,你的老师确实正确地分担了他的职责.他将表示与xml解析逻辑分开,并将xml数据与xml解析行为分开.
第一:如果你正在编程课程中,他可能有充分的理由希望你手工完成这一点:我真的不建议与你的教授争论.你永远不会赢,你可以伤害你的成绩.
第二:他的版本不是(考虑到它主要是对System.XML命名空间部分的重写)太可怕了.基本上你有一个"是"你的XML类.可以把它想象成XDocument或XmlDocument类:基本上它只包含Xml本身.然后你有你的Xml Parser:想象一下像XmlReader.而你的最后一个是他的XmlWriter.
请记住,使用OOP,您的Xml类(代表文档本身的那个)既不知道也不关心它如何拥有它拥有的信息.此外,Parser应该知道如何获取Xml,但它不应该关心它存储的位置.最后,你的Writer类不应该关心数据的来源,只关注它的来源.
我知道它过度使用了,但是把你的程序想象成一辆汽车 - 它有几个部分都需要一起工作,但你应该能够改变它的任何给定部分而不会对其他部分产生重大影响.如果你把所有东西都归为一类,你会失去这种灵活性.
| 归档时间: |
|
| 查看次数: |
555 次 |
| 最近记录: |