Let’s talk OOP again

You will encounter same problem, no matter what kind of software products you design or develop:
how to design “User Object”?
I usually design “User Object” like this (The following is a simple example):
I think most of us design “User Object” like this.
En , looked as if there is no problems , Moreover ,it had became some people's habit
We do like design “Add method” like “Add(xxx,xxx,xxx,xxx,xxx,xxx)”
But, when I review some base OOP knowledge recently; I found there is something wrong.
So, I change my old design(The following is sample example too):
If you can see I mind? Why “Example1” change to “Example2”?
Two important changes at there:
1, I use “Property” replace “public variable”;
public virtual string UserName
        ...{
            get ...{ return _userName; }
            set
            ...{
                if (_userName != value)
                ...{
                    if (value.Length > 16||value.Length<4)
                    ...{
                        throw new Exception("you can input 4-16 characters to UserID only");
                    }
                    if(...)
                    ...{
                        throw new Exception("... ...")
                    }
                    if(...)
                    ...{
                        throw new Exception("... ...")
                    }
                    _userName = value;
                }
            }
        }
2, I use “Add (User xxx)” replace “Add (XXX,XXX,XXX)”;
Do you know why?
First, Use Property can get more control, the following code will show it:
You can code like this:
User objUser=new User();
Users objUser=new Users();
User.userName=TxtUserName.Text.Trim();
User.Password=TxtPassword.Text;
objUser.Add(objUser);
Attention, if username is too long or short, “User Object” will throw a Exception, we can catch this exception.
If you use old design,your code maybe like this:
User objUser=new User();
String strUserName= TxtUserName.Text.Trim();
String strPassword=TxtPassword.Text;
If(strUserName >16|| strUserName <4)
...{
       … …
}
objUser.Add(strUserName,strPassword);
Which one more easy ?
Second, Like those method:”add”, “update” etc, use Object as parameter better than variable, It is more easy. You can see it from above code.
Third, it is most important thing: “Add”, "Update” methods not belong to “User Object”, they should belong to “Users Object” or belong to “Dept Object
I don’t know if you can understand the third. but you should try do it.
In this world, much thing we don’t know, but if when we try, we will get it

Let's talk OOP Again相关推荐

  1. Java OOP(Object Oriented Programming)个人理解及总结

    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...

  2. java 跳转 oop_Java基础之:OOP——接口

    Java基础之:OOP--接口 usb插槽就是现实中的接口,可以把手机,相机,u盘都插在usb插槽上,而不用担心那个插槽是专门插哪个的,原因是做usb插槽的厂家和做各种设备的厂家都遵守了统一的规定包括 ...

  3. OOP 面向对象 七大原则 (一)

    OOP 面向对象   七大原则 (一) 大家众所周知,面向对象有三大特征继承封装多态的同时,还具有这七大原则,三大特征上一篇已经详细说明,这一篇就为大家详解一下七大原则: 单一职责原则,开闭原则,里氏 ...

  4. 【廖雪峰Python学习笔记】面向对象编程OOP

    面向对象编程 OOP:Object Oriented Programming 程序的基本单元:对象 [ = 数据 + 操作数据的函数] [属性 + 方法] 三大特点:数据封装.继承和多态 OPP中的计 ...

  5. Perl5的OOP学习笔记

    在Perl排名持续下降的情况下学Perl,似乎是有点不明智.但是,工作需要,不得不学啊.再说,Perl现在在测试领域还是用得非常多的.Phython虽然也在测试领域开始活跃起来,不过我始终还是不太喜欢 ...

  6. 如何用c语言读取硬盘串号_如何用C语言实现OOP

    我们知道面向对象的三大特性分别是:封装.继承.多态.很多语言例如:C++和Java等都是面向对象的编程语言,而我们通常说C是面向过程的语言,那么是否可以用C实现简单的面向对象呢?答案是肯定的!C有一种 ...

  7. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...

    当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替. ...

  8. Java基础-OOP特性之封装、继承、多态、抽象

    为什么80%的码农都做不了架构师?>>>    //要习惯将程序(功能.代码)模块化 //OOP四大特性:封装.继承.多态.抽象 //OOP的核心:封装一个类,把数据抽象出来,再把方 ...

  9. 深入浅出OOP(四): 多态和继承(抽象类)

    在本文中,我们讨论OOP中的热点之一:抽象类.抽象类在各个编程语言中概念是一致的,但是C#稍微有些不一样.本文中我们会通过代码来实现抽象类,并一一进行解析. Abstract Classes 在微软的 ...

  10. 第7章 面向对象编程(OOP) 《Kotin 编程思想·实战》

    第7章 面向对象编程(OOP) 7.1 面向对象思想 7.2 类与继承 7.2.1 类 7.2.1.1 抽象类 7.2.1.2 接口 7.2.1.3 枚举 7.2.1.4 注解 7.2.1.5 静态类 ...

最新文章

  1. 中文版Python入门学习的三件法宝!最后一天开放免费下载
  2. 我该建数仓、大数据平台还是数据中台?看完脑子终于清醒了
  3. 【面试招聘】聊聊秋招中的面试技巧
  4. Python fire官方文档教学(自动生成命令行,个人觉得意义不大,不如argparse)
  5. 贷中风控调额方法与策略详解
  6. 高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题
  7. 空间可能与时间一样,也是不可逆转的
  8. 190125每日一句
  9. Python中更新pip版本的那些事
  10. SSD1306 OLED驱动芯片 详细介绍
  11. 远景html制造机模板,台式机ALC892制作仿冒appleHDA的教程,前置MIC自动检测。
  12. 【渝粤题库】陕西师范大学163104 景区管理 作业 (高起专)
  13. 珍惜当下,路会慢慢走出来的
  14. 设 l í {a,b,c}* 是满足下述条件的符号串构成的语言,陇东学院《编译原理》练习题及答案...
  15. STM32H7 DMA USART空闲中断接收不定长数据
  16. H264 raw stream获取nalu的长度信息
  17. 云计算与大数据——云计算概述
  18. linux配置防火墙白名单(限制某个IP段)
  19. mongodb pymongo
  20. html格式字体颜色入门(颜色表格查询)

热门文章

  1. python调用“天擎”系统需要安装的库
  2. 18. --plic--=--ply--=--pli--=--ple--=--plex--=--plo-- to fold 倍,重,折叠 (词19、20)
  3. HDU 5745 La Vie en rose 暴力
  4. CSS中几种解决高度坍塌方式分析
  5. 千兆光模块如何与交换机搭配使用?
  6. Django实现websocket聊天室
  7. 汽车ESP系统建模及仿真研究(2022-09-20)
  8. iOS中相对1970的时间转换为现在时间
  9. 群体遗传学习笔记-测序技术学习
  10. 嵌入式面试常见问题(三)