首页 > 其他分享 >面向对象-谁的事情谁负责

面向对象-谁的事情谁负责

时间:2024-06-18 20:27:49浏览次数:22  
标签:set 事情 int void 面向对象 课程 student 成绩 负责

文章目录

概要

面向对象(Object Oriented)是一种编程范式,是一种对现实世界理解和抽象的方法。这种理解性很强的知识需要漫长的时间去理解和掌握。需要掌握的原则之一就是:谁的事情谁负责。

例子

编程序,实现学生日常选课、给学生登记平时分数和最终考试成绩的过程。具体要求如下:

(1)定义课程类 :Course,属性包括:课程名,平时分(假设共5次平时分),平时分的平均分,期末成绩,综合成绩;函数包括:设置课程名、登记某次平时分、计算平均分、设置课程的期末成绩、求综合成绩(按平时分的平均分占30%,期末成绩占70%计算);

(2)定义学生类:Student,属性包括:学号,姓名,所选课程(假设只有一门);函数包括:设置学号和姓名、选课。

(3)主函数:

创建至少1个学生对象,为其设置学号和姓名;选课;登记5次平时分;设置该课程的期末成绩;求综合成绩;输出学号、姓名、课程名、5次平时分、期末成绩、综合成绩。

答案之一

#include <iostream>
#include <string>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class Course
{public:
	void set_class();//设置课程名
	int set_score();// 上平时分
	int calculate_p();//计算平均分并求综合成绩
	int set_final();//登期末成绩
	void show_course();
private:
	string subject;
	int score[5];
	int p_score;
	int finl;
	int integrated;
};
class Student
{private:
	int number;
	string name;
public:
	void set_student();
	void show_student();
};

 

int main(int argc, char** argv) {
	Course c1;
	Student s1;
	s1.set_student();
	c1.set_class();
	c1.set_score();
	c1.set_final();
	c1.calculate_p();
	s1.show_student();
	c1.show_course();
	return 0;
}

看似用了面向对象,实际上类之间并无本质的交互。

答案之二

#include<iostream>
#include<string>
using namespace std;
class Course
{
private:
	string coursename;
	double timegrade[5];
	double aver;
	double finalgrade;
	double compregrade;
public:
	void setCourse();
   //其他函数
};
class Student
{
private:
	string num;
	string name;

public:
	Course course1;
	void set_value();
    //其他函数
};
int main()
{
	Student student;
    student.set_value();
	student.course1.setCourse();
    //...
	return 0;
}

对象之间有交互,但存在的问题:

  • 可重用性差。从main函数看,没有创建课程对象,似乎“课程”类是专属“学生”类的,不能干别的用。
  • 丧失封装性。不要直接用对象加点访问属性,尽管教材是那么讲的也不行。
  • 写成这样更怀疑类的设计有错误:student.course1.setCourse()。

答案之三

  • 谁的事情谁负责。学生类只负责学生属性的维护,课程类只负责课程属性的维护。可重用性好。
  • 涉及到交互时,把事情交给对方做,手伸的别太长。main()中,学生对象需要访问课程对象的属性时,调用Student::CalAveUScore(); 实际上是把事情交给了课程对象,即cr.CalAveUScore(),原因是学生对象自己没有课程对象的属性,不是自己的属性自己不“亲自做”,谁能做最终交给谁来做。就是这个思想。

标签:set,事情,int,void,面向对象,课程,student,成绩,负责
From: https://blog.csdn.net/workflower/article/details/139752084

相关文章

  • 第一百一十节 Java面向对象设计 - Java泛型类
    Java面向对象设计-Java泛型类使用泛型,我们可以在不知道代码操作对象的类型的情况下编写代码。它允许我们创建泛型类,构造函数和方法。泛型类是使用形式类型参数定义的。形式类型参数是一个逗号分隔的变量名列表,位于类声明中类名后面的尖括号<>中。语法下面的代码声明一......
  • Java面向对象:初识继承
    继承:一个类(子类或派生类)继承另一个类(父类或基类)的特性(属性和方法)。1、继承1.1、不使用继承例子:classDog{Stringname;intage;publicDog(Stringname,intage){this.name=name;this.age=age;}publicvoideat(){......
  • 面向对象程序设计1.2 类之间的组合关系
    一、复习一下在1.1里我们定义了类Date,忘记的小伙伴可以看看下面的代码classDate{private:intyear;intmonth;intday;//数据成员,默认为私有public:Date():year(2000),month(1),day(1){}//不带参数的构造函数Date(intyear,intmonth,in......
  • 【PL理论】(29) OOP:面向对象编程 | 案例研究:C++ 中的类 | 继承 | 继承和指针 | Object
    ......
  • C++面向对象三大特性
    C++三大特性包括了封装、继承、多态。封装:封装是将数据属性和操作这些数据的函数(方法)捆绑在一起的过程。它隐藏了实现细节,只暴露出一个可以被外界访问的接口。封装允许开发者将对象的实现细节保护起来,只提供必要的操作界面,从而减少错误和提高代码的可维护性。继承:继承是一种......
  • 面向对象 这一文拿捏了 ⭐ (建议收藏)
    面向对象中级部分已整理完成,建议收藏......
  • 第一百零九节 Java面向对象设计 - Java抽象类和方法
    Java面向对象设计-Java抽象类和方法Java可以定义一个类,其对象不能被创建。它的目的只是表示一个想法,这是其他类的对象共有的。这样的类称为抽象类。语法我们需要在类声明中使用 abstract 关键字来声明一个抽象类。例如,下面的代码声明一个Shape类的抽象:publicabstr......
  • R 语言入门 —— 面向对象
    R语言入门——面向对象文章目录R语言入门——面向对象S3类1.基本概念2.创建S3对象3.创建泛型函数4.S3对象的继承5.缺点S4类1.创建类和对象2.属性访问3.类型检查和默认值4.泛型函数与方法5.继承6.与S3交互RC类1.创建类和对象2.定义和使用方......
  • Java面向对象基本特征——抽象、接口、多态、内部类
    面向对象概述        面向对象思想是从现实世界客观存在的事物出发来构造软件系统。对象是现实生活中实际存在的事物;类是由相同类型的对象共有的特征和行为归纳构成的。    而面向对象的思想就是把现实世界中的对象所具有的特征和行为抽象出来形成一个类,再根......
  • php基础语法_面向对象
    PHPphp代码标记多种标记来区分php脚本ASP标记:<%php代码%>短标记:脚本标记:标准标记(常用):简写风格:ASP风格:<%php代码%>注意:简写风格和ASP风格需要在php.ini配置文件中修改以下配置为on,移植性差short_open_tag=onasp_tags=on<html><body> <b> <?php //脚......