168 次浏览

技术实践 2020 小组第七次活动

大家好,以下是咱们工业大学 2020 年技术学习小组的第七次活动记录。

面向对象的程序设计:封装

活动时间:2020年7月7日 TUE 20:00 – 22:30


本次内容

*

“沟通是一切的开始”
“这个世界是不公的,但知识和时间却对每个人都公平”

*

1.环境的准备

(1) 安装 MongoDB

  • MongoDB 是一个 NoSQL 类型的数据库
  • 它本身并没有一个可视化的界面
  • 你可以通过 Win + R, 随后键入 “services.msc” 并找到 MongoDB Server 来查看它的运行状态

(2) 安装 MongoDB Compass,这是一个使 MongoDB 中的数据可以被可视化的工具

(3) 使用 GitHub 创建一个新的 Repository

*

2.面向对象的程序设计:封装

(1) 在你的电脑中 Clone 新建的 Repo,并在其中,使用 Visual Studio 创建一个新的 Console App 工程

(2) 基础数据类型:int

  • 思考: int a = 1; 在被赋值时发生了什么?

— a 只是一个代称,它实际指向/指代内存的一个空间
— 这个空间有多大,是必须明确的,int 的作用是明确它的大小
— = 1 是将数据 1 实际放入到这个空间内

(3) 定义一个全新的类型 —— 人类 People

  • 使用 class 关键字,它和 C 语言中的 struct 结构体极其相似
  • 思考人类应该包含什么东西?为人类的定义属性
  • 思考人类应该包含什么行为?为人类的定义行为

(4) 封装

  • 应该被封装的内容

— 成员变量:状态、数据,一定是一个名词、值
— 成员方法:行为、接口,一定是一个动作、动词

  • 在定义的时候,注意访问修饰符,如果需要允许被外界访问,则设置为 public,如果不写则将被认定为 private

  • 如何创造一个实际的人类?—— 实体/对象实例: People wangzhuo = new People();

(5) 序列化与反序列化

  • 通过 NuGet 获取在线的类库实现:例如,Newtonsoft.Json.NET
  • 将一个对象实例扁平化形成字符串,输出:序列化
  • 将一个字符串,重新恢复为实体对象:反序列化
  • 将一个对象序列化后,再反序列化,可以完成最简单的 Clone() 操作,例如:

— People wangzhuo2 = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(wangzhuo));

using Newtonsoft.Json;
using SquirrelFramework.Domain.Model;
using SquirrelFramework.Repository;
using System;
 
namespace OOP
{
  class Program
  {
    static void Main(string[] args)
    {
      People wangzhuo = new People();
      wangzhuo.Age = 18;
 
      Console.WriteLine(JsonConvert.SerializeObject(wangzhuo));
    }
  }
 
  class People
  {
    // 构造方法
    public People()
    {
 
    }
 
    // 成员方法 行为
    public void Eat(int foodSize)
    {
      HungerIndex += foodSize / 2;
    }
 
    // 成员变量 属性
    int HungerIndex;
    public string IdNumber; // 唯一标识符
    public string Name;
    public bool Gender;
    public int Age;
    public DateTime Birthday;
    public string Professional;
  }
 
}

*

3.结合数据库操作,将对象存储到数据库中

(1) 通过 NuGet 下载 SquirrelFramework.MongoDB

(2) 修改下载的 mongodb.json 文件的属性,将 Copy to Output Directory 改为 Copy always

(3) 为已有的 People 增加 DomainModel 的基类继承

(4) 增加用于读写数据库的工具类 class PeopleCurdRepository : RepositoryBase { }

using Newtonsoft.Json;
using SquirrelFramework.Domain.Model;
using SquirrelFramework.Repository;
using System;
 
namespace OOP
{
  class Program
  {
    static void Main(string[] args)
    {
      //People wangzhuo = new People();
      //wangzhuo.Age = 18;
      //People xiaohong = new People();
      //xiaohong.Age = 16;
      //People xiaobai = new People();
      //xiaobai.Age = 30;
 
      PeopleCurdRepository database = new PeopleCurdRepository();
            
      //database.Add(wangzhuo);
      //database.Add(xiaohong);
      //database.Add(xiaobai);
 
      Console.WriteLine(JsonConvert.SerializeObject(database.GetAll()));
    }
  }
 
  class PeopleCurdRepository : RepositoryBase<People> { }
 
  class People : DomainModel
  {
    public People()
    {
 
    }
 
    // 成员方法 行为
    public void Eat(int foodSize)
    {
      HungerIndex += foodSize / 2;
    }
 
    // 成员变量 属性
    int HungerIndex;
    public string IdNumber; // 唯一标识符
    public string Name;
    public bool Gender;
    public int Age;
    public DateTime Birthday;
    public string Professional;
  }
 
}

*

4.编写 Windows Forms 版本的应用程序
(1) 在当前的解决方案,新增一个全新的 Windows Forms (.NET Framework) 项目
(2) 通过 NuGet 下载 SquirrelFramework.MongoDB
(3) 修改下载的 mongodb.json 文件的属性,将 Copy to Output Directory 改为 Copy always
(4) 在窗体设计器中,添加 DataGridView 控件
(5) 获取数据库中的数据,并将获取的全部数据加载到这个 DataGridView 控件中

var data = testCrudRepository.GetAll();
dataGridView.DataSource = data;

(6) 具体的代码示例,可以参考:https://github.com/imnista/SquirrelFramework.MongoDB 下的 src/Samples

*

5.行动项

  • 重复上述过程,完成代码,并提交
  • 请持续更新你的简历: 你的邮箱、了解的项目管理的基础知识、了解 Windows Forms 的开发
  • 开始英语学习打卡

About nista

THERE IS NO FATE BUT WHAT WE MAKE.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注