C13041 固定收益系列课程之二:固定收益市场(100分)
篇一:萌夫系列之二
《叩开C#之门》系列之二
篇二:萌夫系列之二
二、C#与面向对象编程语言
C#是纯粹的面向对象编程语言,它真正体现了“一切皆为对象”的精神。在C#中,即使是最基本的数据类型,如int,double,bool类型,都属于System.Object类型。此外,使用C#编程,不会存在与游离于对象之外的属于过程的东西。因此,学习C#,就必须具有面向对象思想,不明白所谓的“面向对象思想”,就不可能掌握C#的精髓,而对于C#的理解,就只能仅限于语言特色的表面了。
很多讲解面向对象思想的书籍和文章喜欢将面向对象与面向过程相比较,然而对于学习程序设计的初学者而言,是完全没有必要的。一张空白的纸张,事实上比写满字的纸张更利于未来的发展。
那么什么是“面向对象思想”?其精要当然是“一切皆为对象”的 意义。软件的开发与设计,是围绕着开发的目标进行的。比如开发一个电子商务网站,那么与电子商务有关的都是我们要操作和关心的,商品、订单、用户、目录、 购物车等等,都是对象。如果要开发一个论坛,那么论坛中必备的要素,如论坛分类、主题、帖子、评论、用户,也全都是对象。从小处说,我们要求写一个算法用 以计算阶乘,那么起始值、运算结果、以及整个算法都是对象。
那么对象具有什么特质?一般而言,一个对象应具有属性和行为。以现实世界为例,“人”作为一种特殊的动物,也是我们所称谓的“对象”。 这个对象具有很多属性,例如姓名,身高、体重、民族、国籍、出生年月等等。而行为呢,可以是行走、吃饭、跑步、乃至于玩游戏、踢足球。如果从词义学的角度 来看,属性更偏向于名词的范畴,而行为则近乎于动词。然而对象也有特殊的情况,或者只具有属性,或者只具有行为。例如身份证,可能只具有姓名,出生年月, 籍贯,身份证号等属性,而没有行为。例如“飞”,这本身是一种动作,但同样可以认为是一种行为。
然而这种划分并非绝对,根据实际情况,同一种对象具有的属性和行为可能不一样。例如同样是“人”,如果是要开发一个户籍管理系统,我们就不必去考虑行走、吃饭、跑步等行为,但如果是一个足球游戏,那么对象“人”,就需要各种踢足球的动作作为该对象的行为了。再比如“身份证”对象,也可能为了使用方便,会为它添加“IsValidate”这样一个行为。
还要注意的是,很多时候属性其实本身也是一个对象,例如姓名,可以是string类型,它属于Sytem.Object对象类型,我们也可以单独为姓名建立一个类对象:
public class Name
{
public string FirstName;
public string MiddleName;
public string LastName;
}
在C#里,有各种各样的对象类型,除了本身提供的基本类型外,还支持自定义各种类型,包括class,struct,enum,interface,delegate,event。以前面的例子来看,对象Person“人”,就可以被定义为class类型,国籍可以被定义为enum类型。没有行为的身份证,也可以被定义为struct类型。动作“飞”可以被定义为interface类型。至于delegate和event,则是一种特殊对象类型,例如我们可以为论坛管理系统,定义一系列事件,如BeforePost,AfterPost等等。关于这些内容,我会在后面的内容中详细讲解。 要 掌握面向对象思想,就必须具备识别系统中对象的能力。在我们要开发的系统中,哪些需要定义为单独的对象,而且这个对象应该具备哪些属性和行为,都是初学者 比较头疼的问题。要正确地识别对象,就需
要首先分析该系统所应实现的功能。例如,我们要求开发一个电子商务系统,功能要求如下:
1、支持商品的查询功能;
2、用户如需购买商品,需要成为注册用户并登录;
3、如果当前库存无该商品,用户可以预订;
4、用户可以将商品放入购物车;
5、用户购买商品之前,需提交订单;
6、用户提交订单后,系统应将订购信息发送邮件给用户;
7、用户可以对商品添加评论。
有 一个简单的方法,可以帮助我们识别对象,就是找出这些功能描述中的关键名词,如商品、用户、购物车、订单、评论。这些词语基本上可以涵盖这个电子商务系统 的主要对象了。至于对象的属性,可以考察该系统对这个对象的要求和所需要的信息。例如商品,必然要求有商品名、价格、相关图片、所属类别、库存量等等。至 于行为,我们还可以从功能描述中去寻找与这些对象名词相关联的动词。例如商品的查询,就代表商品具有Search行为。用户注册与登录,就代表该用户具有这两种行为:Register,SignIn。当然隐含的行为自然还包括SignOut。
真正要识别好对象,也许我们需要掌握UML的知识,知道怎么写用例。或者利用极限编程的方法,把一个个用户故事写出来,然后一一识别。不过这些知识对于初学者似乎太难了。我们现在知道能有这样一个方法就可以了。我更希望的是,读者在看完本节,能够建立起“一切皆为对象”的思想。最后,更希望大家能把识别对象看作是一种填字游戏,关键不在于答案是什么,乐趣全在游戏中了。
面向对象思想博大精深,不是三言两语就能说清楚的。但建立这样一种思想,要存乎于你的内心,这在与一种“妙悟”。也许在你写了几百个小程序之后还没能体会到面向对象的真谛,但是在霎那之间,你却突然明白了,顿有一种拨开云开见月明的喜悦。我不是故意卖弄玄虚,有时候开发软件还真需要那么一点灵感,有人说,编程是一门艺术,我同意。那么这种“妙悟”什么时候能来到,我无法确知答案,这需要你的体悟。不过这种体悟与谈禅无关,不是每天冥想就可以的,还是踏实点,多写写程序,慢慢你就会明白了。
还在用枚举 我早就抛弃了
篇三:萌夫系列之二
还在用枚举 我早就抛弃了!(Android注解详解)
本片文章讲解怎么使用Support Annotations注解优化代码,比如使用 android特有的魔术变量注解替代Enum等功能。不要看见使用注解就想到反射会影响性能之类,今天我们就来学习一下Android Support Annotations注解来优化我们的代码,增加可读性的同时,也让让更多的错误消灭在萌芽之中。
作者:OCNYang来源:安卓巴士Android开发者门户|2017-01-12 19:59
收藏
分享
前言:使用Support Annotations注解优化代码
本片文章讲解怎么使用Support Annotations注解优化代码,比如使用 android特有的魔术变量注解替代Enum等功能。不要看见使用注解就想到反射会影响性能之类,今天我们就来学习一下Android Support Annotations注解来优化我们的代码,增加可读性的同时,也让让更多的错误消灭在萌芽之中。 Support Annotations 简介:
Android support library 不断地引入新的注解库,它包含很多有用的元注解,你能用它们修饰你的代码,帮助你发现bug。Support library 自己本身也用到了这些注解,所以作为 support library 的用户,Android Studio已经基于这些注解校验了你的代码并且标注其中潜在的问题。
Support Annotations 如何引入:
注解默认是没有包含的;它被包装成一个独立的库,如果使用了appcompat库,那么 Support Annotations 就会自动引入进来,因为 appcompat 使用了 Support Annotations,如果没有则需要在 build.gradle 中添加如下配置: 1. dependencies {
2. compile 'com.android.support:support-annotations:23.4.0'
3. }
如果你已经引入了 appcompat v7 则可能就没有必要再次引用 support-annotations ,因为 appcompat 默认包含了对其引用。
Support Annotations分类:
Typedef 注解:IntDef / StringDef (Android特有的魔术变量注解替代Enum)
Enum in Android 枚举Enum在java中是一个完整的类. 而枚举中的每一个值在枚举类中都是一个对象. 所以在我们使用时枚举的值将比整数常量消耗更多的内存. 当我们使用枚举在安卓应用中, 如果我们的程序本身内存消耗就比较大,或者是一个游戏的应用程序. 那么我们最好使用常量来替代枚举。可是使用了常量代替后又不能限制取值了。那有什么好的办法呢?
当然, Android 支持注解库中有一些好用的annotation helper 我们可以使用它们来解决我们之前的问题(在编译代码时期).
IntDef和StringDef 是两个魔术变量注解. 使用这个两个来替代之前使用的Enum. 它将帮助我们在编译代码时期像Enum那样选择变量的功能。 @IntDef和”typedef”作用非常类似,你可以创建另外一个注解,然后用@IntDef指定一个你期望的整型常量值列表,最后你就可以用这个定义好的注解修饰你的API了。接下来我们来使用IntDef来替换Enum看一下.
1. public class MainActivity extends Activity {
2. public static final int SUNDAY = 0;
3. public static final int MONDAY = 1;
4. {...省略部分}
5.
6. @IntDef({SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY})
7. @Retention(RetentionPolicy.SOURCE)
8. public @interface WeekDays {
9. }
10.
11. @WeekDays
12. int currentDay = SUNDAY;
13.
14. @Override
15. protected void onCreate(Bundle savedInstanceState) {
16. super.onCreate(savedInstanceState);
17. setContentView(R.layout.activity_main);
18.
19. setCurrentDay(WEDNESDAY);
20.
21. @WeekDays int today = getCurrentDay();
22. switch (today) {
23. case SUNDAY:
24. break;
25. case MONDAY:
26. break;
27. {...省略部分}
28. default:萌夫系列之二。
29. break;
30. }
31. }
32.萌夫系列之二。
33. /**
34. * 参数只能传入在声明范围内的整型,不然编译通不过
35. * @param currentDay
36. */
37. public void setCurrentDay(@WeekDays int currentDay) {
38. this.currentDay = currentDay;
39. }
40.
41. @WeekDays
42. public int getCurrentDay() {
43. return currentDay;
44. }
45. } 说明:
1. 声明一些必要的 int 常量
2. 声明一个注解为 WeekDays
3. 使用 @IntDef 修饰 WeekDays,参数设置为待枚举的集合
4. 使用 @Retention(RetentionPolicy.SOURCE) 指定注解仅存在与源码中,不
加入到 class 文件中
需要在调用时只能传入指定类型,如果传入类型不对,编译不通过。
我们也可以指定整型值作为标志位,也就是说这些整型值可以使用 ’|’ 或者 ’&’ 进行与或等操作。如果我们把@Flavour定义为如下标志位:
1. @IntDef(flag = true, value = {SUNDAY, MONDAY, TUESDAY, WEDNESDAY,萌夫系列之二。
THURSDAY, FRIDAY, SATURDAY})
2. public @interface Flavour {
3. }
那么可以如下调用:
1. setCurrentDay(SUNDAY & WEDNESDAY);
@StringDef用法和@IntDef基本差不多,只不过是针对String类型而已。
怎么样?使用起来还是很简单的吧。如果你只是冲做标题 寻求一种替代Enum
的
方式
进来的话,看到这你就可以直接跳到文章结尾 点个喜欢 离开了。如果你还想知道更多关于注解的强大功能,那么就接着看下面的内容吧!
Nullness注解
@Nullable注解可以用来标识特定的参数或者返回值可以为null。
@NonNull注解可以用来标识参数不能为null。
Resource Type 注解
资源在Android中作为整型值来传递。这意味着希望获取一个drawable作为参数的代码很容易被传递了一个string类型的资源,因为他们资源id都是整型的,编译器很难区分。Resource Type注解在这种条件下可以提供类型检查,例如: 如果类型指定错误,编译不会通过。
常见的Resource Type注解,使用方式都是指定一个integer的参数、成员变量、或者方法,检查对应的资源类型。
AnimatorRes :animator资源类型 AnimRes:anim资源类型 AnyRes:任意资源类型
ArrayRes:array资源类型
AttrRes:attr资源类型 BoolRes:boolean资源类型 ColorRes:color资源类型 DimenRes:dimen资源类型。 DrawableRes:drawable资源类型。 FractionRes:fraction资源类型 IdRes:id资源类型 IntegerRes:integer资源类型 InterpolatorRes:interpolator资源类型 LayoutRes:layout资源类型 MenuRes:menu资源类型 PluralsRes:plurals资源类型 RawRes:raw资源类型 StringRes:string资源类型 StyleableRes:styleable资源类型 StyleRes:style资源类型 TransitionRes:transition资源类型 XmlRes:xml资源类型
以上基本上包括了所有的资源类型,但是有时需要通过RGB颜色整型来设置颜色值,在这种情况下,你可以使用 @ColorInt 注解,表示你期望的是一个代表颜色的整数值,如果使用不对同样也是编译不通过
Threading 注解
比如我们在项目中处理比较耗时的操作,需要制定在工作子线程中执行,可以使用Threading 注解,如果没有在制定的线程中执行也是编译不过的
小学二年级数学精题选做系列之二 (30)
篇四:萌夫系列之二
小学应用题练习作业
大丈夫宁可玉碎,不能瓦全。 —— 北齐书
http://m.myl5520.com/mingrenmingyan/97219.html