提交 a968bddf 编辑于 作者: 魔法少女赵志辉's avatar 魔法少女赵志辉 🍊
浏览文件

Update

上级 eed31668
......@@ -2,6 +2,7 @@
*.log
*.out
*.synctex.gz
*.synctex(busy)
__latexindent_temp.tex
_minted-*/
*.pdf
\ No newline at end of file
\documentclass{dreamClass}
%\newcommand\CC{C\nolinebreak\hspace{-.05em}\raisebox{.4ex}{\relsize{-1}{\textbf{+}}}\nolinebreak\hspace{-.10em}\raisebox{.4ex}{\relsize{-1}{\textbf{+}}}}
\def\CC{{C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\small\bf ++}}}
\def\CC{ {C\nolinebreak[4]\hspace{-.05em}\raisebox{.4ex}{\small\bf ++}} }
\title{
% \vspace{-30pt}
......@@ -20,7 +20,7 @@
\section{课程项目}
课程项目,或者说project,是《高级程序设计》课程任务的一部分,预计将构成课程成绩的20\%
\subsection{要求与原则}
课程项目将会是一个有足够规模的,能行使一定功能的,体现出面向对象和泛型程序设计思想的,带有GUI(Graphics User Interface,图形界面)的,有趣的,\CC{}程序。
课程项目将会是一个有足够规模的,能行使一定功能的,体现出面向对象和泛型程序设计思想的,带有GUI(\textbf{G}raphics \textbf{U}ser \textbf{I}nterface,图形界面)的,有趣的,\CC{}程序。
课程项目应当是从第一行代码开始独立完成的。如有必要,可以使用任何由\CC{}语言写成的函数库。当然,恰好能直接完成课程项目要求的或许不能用:我们希望各位同学自己动手,实现它们。
\subsection{日程安排}
......@@ -30,33 +30,33 @@
各位同学被期望在每个阶段完成一定的任务,通过分步走的方式,逐步完善自己的课程项目。
\subsection{验收与评分标准}
助教将一对一验收每位同学的课程项目的每个阶段。因此,各位同学需要给出:
\begin{itemize}
\begin{enumerate}
\item 课程项目的源代码。
\begin{itemize}
\item 在验收时,助教将就代码中自己感兴趣的点进行提问。各位同学被期望可以回答出这些问题。
\end{itemize}
\begin{itemize}
\item 在验收时,助教将就代码中自己感兴趣的点进行提问。各位同学被期望可以回答出这些问题。
\end{itemize}
\item 课程项目的可执行文件。
\begin{itemize}
\item 在验收时,助教将当面运行这个文件。各位同学被期望能向助教就课程项目的功能进行演示。
\end{itemize}
\begin{itemize}
\item 在验收时,助教将当面运行这个文件。各位同学被期望能向助教就课程项目的功能进行演示。
\end{itemize}
\item 课程项目的对应阶段的项目报告。
\begin{itemize}
\item 项目报告需要是一份\texttt{pdf}格式的文件。内容的具体组织方式不拘,长度宜\emph{},但要清楚地包含:
\begin{itemize}
\item 项目的整体设计,
\item 与实现方式。
\end{itemize}
例如,可以交代项目中主要含有的类,以及它们之间的交互。
还可以稍微提一提:
\begin{itemize}
\item 项目中有趣的地方,
\item 和完成项目时遇到的问题。
\end{itemize}
\end{itemize}
\item 助教可能就项目的整体设计进行提问。各位同学被期望能让助教理解自己的课程项目是如何被构建的。
\end{itemize}
验收时助教将对课程项目进行评分,评分标准包括:
\begin{itemize}
\item 项目报告需要是一份\texttt{pdf}格式的文件。内容的具体组织方式不拘,长度宜\emph{},但要清楚地包含:
\begin{itemize}
\item 项目的整体设计,
\item 与实现方式。
\end{itemize}
例如,可以交代项目中主要含有的类,以及它们之间的交互。
还可以稍微提一提:
\begin{itemize}
\item 项目中有趣的地方,
\item 和完成项目时遇到的问题。
\end{itemize}
\item 助教可能就项目的整体设计进行提问。各位同学被期望能让助教理解自己的课程项目是如何被构建的。
\end{itemize}
\end{enumerate}
验收时助教将对课程项目进行评分,评分标准包括:
\begin{itemize}
\item 是否实现了指定的功能,
\item 是否有一个\emph{好用的}(而不关心\emph{好看的})界面,
......@@ -90,32 +90,45 @@
我们强烈建议,没有经验的同学在第一时间下载、安装这些库并且实际体验。安装过程可能会极端地痛苦和使人困惑,尤其是对于没有经验的同学来说。如果你遇到这方面的问题,欢迎向助教寻求帮助。
\section{关于开发环境}
课程项目本身并不限定开发环境。但是考虑到课程OJ的情况,我们建议使用gcc或者clang,及其附属的工具链来编译课程项目。
\subsection{OJ}
《高级程序设计》的OJ的评分服务器运行Linux操作系统,使用gcc 4.9.2作为编译器套件,使用\CC{}11作为\CC{}语言的标准。这一点是无法更改的。
\subsection{Visual Studio}
Visual Studio是Windows上非常流行的集成开发环境,它可以用来开发\CC{}程序。不过它默认使用的编译器,MSVC,和gcc/clang的行为存在一定差异(尽管我们可以通过设置项目的编译选项让MSVC的行为和标准尽可能一致,或者在稍新一些的Visual Studio中选择使用clang作为编译器)。总之,如果对自己写的程序是否符合\CC{}标准没有信心,我们建议不要使用Visual Studio作为课程的主力开发环境,这可能会对OJ的分数造成不利影响(比如在本地写的程序可以欢乐地跑起来,但是一传到OJ上就不能正常工作)。
\subsection{Windows}
Windows是非常流行的操作系统,传统上它对开发者不是很友好。
课程项目本身并不限定开发环境。但是《高级程序设计》的OJ的评分服务器运行Linux操作系统,使用gcc 4.9.2作为编译器套件,使用\CC{}11作为\CC{}语言的标准。这一点是无法更改的。
好消息是,新一些的Windows 10中包含了一个名为WSL(Windows Subsystem for Linux,适用于Windows的Linux子系统)的组件。第二代的WSL,被称为WSL2,可以被视作一个轻量化的Linux虚拟机。在Windows 11中,微软为WSL加入了官方的图形界面支持,即为WSLg。
考虑到课程OJ的情况,我们建议使用gcc或者clang,及其附属的工具链来编译课程项目。
\subsection{操作系统}
\subsubsection{Windows}
Windows是非常流行的操作系统,传统上它对开发者不是很友好。
或者,按照传统上的解决方式,可以使用VMware Player、Virtual Box、Hyper-V之类的虚拟机
好消息是,新一些的Windows 10中包含了一个名为WSL(\textbf{W}indows \textbf{S}ubsystem for \textbf{L}inux,适用于Windows的Linux子系统)的组件。第二代的WSL,被称为WSL2,可以被视作一个轻量化的Linux虚拟机。在Windows 11中,微软为WSL加入了官方的图形界面支持,即为WSLg
再或者,MinGW项目将gcc套件移植到了Windows上。MSYS2是一个这类软件的集合,可以考虑使用这一套工具来在Windows下使用gcc/clang编译器套件。
\subsection{Visual Studio Code / Qt Creator}
\subsubsection{Linux}
如果机器上装有Linux,或者,按照传统上的解决方式,虽然机器上运行的是Windows,但是使用了WSL/Hyper-V、VMware Player、VirtualBox之类的虚拟机,
那么应当可以期望正常地进行编程。
\subsubsection{macOS}
如果机器是搭载Intel处理器的MacBook,并且运行的是macOS,应当也不会存在问题。
搭载Apple M1处理器的MacBook的情况未经考察,如果遇到问题,请及时和助教取得联系。
\subsection{集成开发环境}
\subsubsection{Visual Studio}
Visual Studio是Windows上非常流行的IDE(\textbf{I}ntegrated \textbf{D}evelopment \textbf{E}nvironment,集成开发环境),它可以用来开发\CC{}程序。不过它默认使用的编译器,MSVC,和gcc/clang的行为存在一定差异(尽管我们可以通过设置项目的编译选项让MSVC的行为和标准尽可能一致,或者在稍新一些的Visual Studio中选择使用clang作为编译器)。总之,如果对自己写的程序是否符合\CC{}标准没有信心,我们建议不要使用Visual Studio作为课程的主力开发环境,这可能会损害各位同学的OJ体验(比如在本地写的程序可以欢乐地跑起来,但是一传到OJ上就不能正常工作)。
\subsubsection{Visual Studio Code}
Visual Studio Code是非常流行的代码编辑器。通过加入一些插件,它可以很好地胜任《高级程序设计》课程中的开发工作。
\subsubsection{Qt Creator}
Qt Creator本来是为开发使用Qt库的\CC{}程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的\CC{}的IDE来使用,或许有些同学会喜欢它。
\subsubsection{CLion}
CLion也是可用的\CC{}IDE。
\subsection{其他有用的工具}
\begin{description}
\item[Address Sanitizer] 是一个开箱即用的内存安全错误检查工具。它对于找出\CC{}程序中的内存错误很有帮助。
\item[clang-format] 是一个代码排版工具。可以使用它把\CC{}代码排版成自己喜欢的样式。
\item[clang-tidy] 是一个代码风格检查工具。它可以就代码的不良风格给出警告。
\item[\texttt{-Wall}] 是gcc/clang编译器的编译选项。开启它将得到更多来自编译器的警告,这有助于在编写代码的过程中尽早发现问题。类似的选项还有很多。
\end{description}
Qt Creator本来是为开发使用Qt库的\CC{}程序而设计(在这门课里让我们忽略QML吧)。但它也可以被当作是通常的\CC{}的集成开发环境来使用,或许有些同学会喜欢它。
\subsection{Address Sanitizer / clang-format / clang-tidy / -Wall}
Address Sanitizer是一个开箱即用的内存安全错误检查工具。它对于找出\CC{}程序中的内存错误很有帮助。
clang-format是一个代码排版工具。可以使用它把\CC{}代码排版成自己喜欢的样式。
clang-tidy是一个代码风格检查工具。它可以就代码的不良风格给出警告。
-Wall和-Wextra等是gcc/clang编译器的编译选项。开启这些选项将得到更多的警告,这有助于在编写代码的过程中尽早发现问题。
\section{关于\CC{}}
如果觉得有必要的话,可以找一些经典的\CC{}教材作为自己的参考书。在这里我们推荐\emph{A Tour of \CC{}}\emph{Programming -- Principles and Practice Using \CC{}}\emph{\CC{} Primer}
如果觉得有必要的话,可以找一些经典的\CC{}教材作为自己的参考书。这里我们姑且推荐一些:
\begin{description}
\item[\emph{A Tour of \CC{}}] 适合熟练掌握一门其他程序设计语言的同学。这本书相对比较薄,可以以相对快的速度总览现代\CC{}的精髓。
\item[\emph{Programming -- Principles and Practice Using \CC{}}] 适合编程基础薄弱的同学。这本书的优势在于,它以FLTK为基础,介绍了图形库的基本思想。
\item[\emph{\CC{} Primer}] 适合基础相对薄弱的同学。这本书写得很详细,适合作为入门读物。
\end{description}
除此之外,也可以参考互联网上的一些资料,比如\emph{\CC{} Core Guidelines}
\end{document}
Supports Markdown
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册