C# —— OOP/OOD(面向对象编程/分析)经验总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# —— OOP/OOD(面向对象编程/分析)经验总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5120字,纯文字阅读大概需要8分钟。
内容图文
![C# —— OOP/OOD(面向对象编程/分析)经验总结](/upload/InfoBanner/zyjiaocheng/644/2a46e523dd67420dae1d2e1098590071.jpg)
学习面向对象编程语言实际上是学习好面向对象编程的各种原则、方法、技巧、经验、模式等;
注意:下面通过一个项目实战【模拟考试系统】,从这个过程中展示各种方法原则;
一、项目需求分析
1)试题数据存放在文本文件中,分析格式(后面可以改成数据);
2)面向对象程序设计的分析基本步骤:
1.分析项目中有哪些类(或者对象)参与程序。分析结果:
- 对象选择的标准:【名词分析法】
- 第一, 这个对象的确能参与程序的运行;
- 第二, 这个对象有对象的基本特征(属性、方法);
- 第三, 对象必须是项目强相关的对象;
初步找到的:试卷、试题、计算机、考生、答案、题干、选项…
筛选后:
试卷类:本项目中只包含一张试卷(后续拓展可以做成多套试卷);
试题类:包括题干、选项、答案 (经过分析答案还应该有一个独立的对象);
答案类:正确答案、答案分析、所选答案;(答案和试题是关联的)
边界类:项目主界面(负责和用户交互,完成对象关联)
2.分析项目中类或对象之间的关系。分析结果:
- 试卷<–>试题:一张试卷包含若干试题;一对多;试题在试卷中应该以集合对象形式存在;
- 试题<–>答案:一对一;答案这个对象应该在试题中以对象属性形式存在;
- 边界类<–>试卷:一个窗体中有一个试卷对象;
二、面向对象中,类的设计方法
1)设计答案类:
- 属性:
- 正确答案、所选答案、答案分析;
2)设计试题类:
- 属性:
- 试题编号、题干、选项A、B、C、D、答案对象(类似于数据库外键)
3)设计试卷类:
- 属性:
- 试题集合List<>、
- 方法:
- 抽取试题;
- 题目选择;
- 提交试卷;
4)设计边界类:
- 属性:
- 试卷对象、试题序号;
- 方法:【或者可以理解为事件】
- 抽取试题;
- 题目选择;
- 提交试卷;
(三)总结
- 通过程序编写重点体会对象之间的关系确定方法。
- 掌握OOP方法,在程序开发过程中,可以做到业务和前端分离,符合“高内聚、低耦合”;更好地让不同的开发者开发自己的业务部分;
代码实现:
1、Paper 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace TeachDemo.Models
{
/// <summary>
/// 试卷类
/// </summary>
public class Paper
{
public Paper()
{
questions = new List<Question>(); //只要是对象类型,最好都在这里进行初始化一下
}
/// <summary>
/// 试题集合对象
/// </summary>
private List<Question> questions; //私有字段
public List<Question> Questions //属性,设置为只读属性
{
get { return this.questions; }
}
/// <summary>
/// 抽取全部试题
/// </summary>
public void ExtractQuestions()
{
FileStream fs = new FileStream("questions.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs, Encoding.Default);
string contents = sr.ReadToEnd(); //一次性读取全部内容
string[] questionArry = contents.Split(Convert.ToChar("&")); //将字符串分割为试题对象数组
string[] question = null; // 保存一道试题
foreach (string item in questionArry)
{
//将一道试题字符串分隔后变成数组信息
question = item.Trim().Split(Convert.ToChar("\r"));
this.questions.Add(new Question
{
Title = question[0].Trim(),
OptionA = question[1].Trim(),
OptionB = question[2].Trim(),
OptionC = question[3].Trim(),
OptionD = question[4].Trim(),
QAnswer = new Answer() { RightAnswer = question[5].Trim() } //凡是对象使用之前都要new一下
});
}
sr.Close();
fs.Close();
SavePaper();
}
private void SavePaper()
{
FileStream fs = new FileStream("questions.obj", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, this.questions); //将当前文本文件中读取的数据对象,保存为集合对象,并以序列化的方式存在
fs.Close();
}
//下面的方法可以替代上面的方法,当然第一次是不行的,但是开发以后给用户是可以的
//public void ExtractQuestions()
//{
// FileStream fs = new FileStream("questions.obj", FileMode.Open);
// BinaryFormatter bf = new BinaryFormatter();
// this.questions = (List<Question>)bf.Deserialize(fs); //反序列化以后是object类型,需要进行强制类型转换
// fs.Close();
//}
/// <summary>
/// 提交试卷
/// </summary>
/// <returns></returns>
public int SubmitPaper()
{
int score = 0;
foreach (Question item in this.questions)
{
if (item.QAnswer.SelectedAnswer == string.Empty) continue;
if (item.QAnswer.RightAnswer.Equals(item.QAnswer.SelectedAnswer))
score += 5;
}
return score;
}
}
}
2、Question类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TeachDemo.Models
{
/// <summary>
/// 试题类
/// </summary>
[Serializable]
public class Question
{
/// <summary>
/// 构造方法(在方法中使用初始化)
/// </summary>
public Question()
{
QAnswer = new Answer(); //初始化
}
public int QuestionId { get; set; }
public string Title { get; set; }
public string OptionA { get; set; }
public string OptionB { get; set; }
public string OptionC { get; set; }
public string OptionD { get; set; }
public Answer QAnswer { get; set; } //答案(对象属性)
}
}
3、Answer类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TeachDemo.Models
{
/// <summary>
/// 答案类
/// </summary>
[Serializable] //标记可序列化
public class Answer
{
public string RightAnswer { get; set; } = string.Empty;
public string SelectedAnswer { get; set; } = string.Empty;
public string AnswerAnalysis { get; set; } = string.Empty;
}
}
(四)通过链式编程与对象的使用完成项目功能
日月忽其不淹兮 发布了39 篇原创文章 · 获赞 1 · 访问量 1191 私信 关注所谓链式编程其实是面向对象编程,所有的操作都基于对象,对象之间可能还有包含于被包含的关系,这样不断地通过“ . ”连接,就形成了一条链:
内容总结
以上是互联网集市为您收集整理的C# —— OOP/OOD(面向对象编程/分析)经验总结全部内容,希望文章能够帮你解决C# —— OOP/OOD(面向对象编程/分析)经验总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。