面向对象设计——通用愉快的经历

面向对象设计——通用愉快的经历

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

        在实际项目,我们经常看到有人写很多代码,很多抽象类,所有这些类的没有使用泛型和委托。应用汽车这种技术后。人们常常对我们说,该代码可重用性和耦合减少,个合格的面向对象的程序设计人员,这样的技术成为了我们的必备技能,今天就跟着我一起来一次轻松愉快的旅行!

定义(假设吃力,请直接看我对他的注解):

        泛型是程序设计语言的一种特性。同意程序猿在强类型程序设计语言中编写代码时定 义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、执行环境对泛型的支持均不一样。将类型參数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型參数这个概念。

注解:

        泛型就是一个黑盒子,我们设计代码的时候不须要知道黑子里是什么类型。我们关心的是对黑盒子的处理,这样,我们就不是针对详细的对象编程,我们就相当于定义了一套逻辑(运行标准),而我们在真正用的时候。给的是什么类型,他就具有了这个逻辑(运行标准)!

生活举例:

        在我们的生活中,泛型的样例事实上已经伴随了我们非常久,就是快递,我们想想,快递公司关心的重点是什么?不是我们要邮寄什么东西,而是他怎么选择路径。并尽最大的努力节省成本。所以他们定义自己快递活动的时候,就将全部的快递件当成黑箱子处理看,他做规划,是北京到四川,火车怎么走。那条路线,轮船怎么走,那条路线,运送到哪个快递员手里最节省成本,这样定义的优点是我们用10元人民币,就像一件重量合适的物品从北京运送到了广东(我们这边的物价,地界不同可能会有出入)

我们看看这幅图再理解一下:


面向对象设计——通用愉快的经历


       是不是认为。有那么点眉头了呢!

可是还是落不到实处。由于我们是程序员。我们习惯用代码交流,基于此,我做了一个c#里的小样例,仅供大家參考批评:

实例:

背景:

        快递公司要对快递包裹这个类进行封装,且大包裹里能够放N多小包裹,在运送之前要将包裹打包

类说明:

        bagList~~~大包裹,能够包括小包裹

        bag~~~~~~包裹类,有详细的物品


包裹代码:

<span style="font-size:18px;">//一个快递包裹仓库
    public class bagList<T>
    {

        //包裹类
        private class bag
        {

            //实例包裹里的物品
            public bag(T t)
            {
                Something = t;
            }

            //收件人地址
            private string address;
            public string Address
            {
                get { return address; }
                set { address = value; }
            }

            

            //收件人邮寄物品
            private T something;
            public T Something
            {
                get { return something; }
                set { something = value; }
            }

            //下一个包裹
            private bag next;
            public bag Next
            {
                get { return next; }
                set { next = value; }
            }

        }

        //一次快递的包裹集合-仓库
        private bag head;

        //初识化这个快递包裹仓库
        public bagList()
        {
            head = null;
        }

        //添加一个包裹到仓库
        public void AddHead(T t)
        {

            //实例一个包裹
            bag Cbag = new bag(t);

            //新包裹装到仓库中
            Cbag.Next= head;

            //仓库的大门给快递员
            head = Cbag;
        }

        //取出仓库中全部的包裹
        //foreach语句必须实现的方法
        public IEnumerator<T> GetEnumerator()
        {
            //实例一个包裹仓库
            bag baglist = head;

            //逐次取出全部的包裹
            while (baglist != null)
            {
                //转换为迭代器类型——为了将结果逐次输出
                yield return baglist.Something;
                //转换为下一步要输出的对象
               baglist = baglist.Next;
            }
        }
    }</span>


client代码(快递员):


<span style="font-size:18px;">    class Program
    {
        static void Main(string[] args)
        {
            //实例一个大包裹能够装快递员收到的包裹
            bagList<int> baglist = new bagList<int>();

            //装0-9个物品到大包裹里
            for (int bag = 0; bag < 10; bag++)
            {
                baglist.AddHead(bag);
            }

            //将0-9个物品显示出来
            foreach (int i in baglist)
            {
                System.Console.WriteLine(i + "包裹已经入库!

"); } //全部包裹打包结束 System.Console.WriteLine("快递包裹打包完毕"); } }</span>


执行结果:


面向对象设计——通用愉快的经历


总结:

        有人以前说过:“凡事就怕认真二字”。

这句话如今来看真的非常有道理,尤其是这次的研究,我发现,不是我们学不会,而是我们不会学,我们对待学习,放纵多余慎重,将就多余斟酌,马虎多余认真,这种学习,最大的表现就是我们顶着面向对象程序设计员的帽子,却浑然不知,我们经不起深入与字字必究的代码检查!这个也是在看完公司的代码后,给我的最大感触!我们在以后的学习中。我们还是要有点“学究”精神的!

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117002.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 第六章:activiti流程分流判断之排它网关和并行网关

    第六章:activiti流程分流判断之排它网关和并行网关第六章:activiti流程分流判断之排它网关和并行网关

    2022年4月23日
  • 关于pdb文件

    关于pdb文件关于pdb文件当程序在VS上编译时,程序所依赖的所有动态链接库(dll文件)也会被编译,编译过程中每个dll都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含dll库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等。当使用VS调试程序时,会默认加载你的程序以及程序依赖的dll库产生的所有pdb文件,但是结…

    2022年6月2日
  • dns欺骗编辑html,charles DNS欺骗

    dns欺骗编辑html,charles DNS欺骗DNS欺骗/DNSSpoofing功能:通过将您自己的主机名指定给远程地址映射来欺骗DNS查找一般的开发流程中,在上线之前都需要在测试环境中先行进行验证,而此时手机客户端请求的域名是不太容易改变的,可以通过设置dns方式把域名转发到测试机上,具体设置Tools->DNSSpoofingSettings比如要把所有包含xxxxxx.com的域名转到10.0.0.71的服务器上,其实用修改…

    2022年11月1日
  • FLAG_ACTIVITY_CLEAR_TOP:「建议收藏」

    FLAG_ACTIVITY_CLEAR_TOP:「建议收藏」FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:ABCD。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_TOP标记,则栈情况变为:AB。如果没有添加这个标记,则栈情况将会变成:ABCDB。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已经存在,则将会把

    2022年7月17日
  • 解决document.cookie无法获取到cookie问题

    解决document.cookie无法获取到cookie问题一、前言在进行前后端联调的时候,由于想实现一个登出操作,前端自动删除浏览器存储的cookie,想通过document.cookie来获取进而进行删除操作,但是发现浏览器有cookie;但是无法获取到情况遂记录二、场景复现首先登录后,浏览器中是有记录cookie的,如图然后我代码层执行documen.cookie发现获取不到,浏览器控制台也同样后面去研究了一下application中存放的cookies的属性内容,发现有个属性HttpOnly是选中状态,这个状态是由于后端设置cookie的时候

    2022年7月27日
  • 堆排序算法(图解详细流程)

    堆排序算法(图解详细流程)堆排序的时间复杂度O(N*logN),额外空间复杂度O(1),是一个不稳定性的排序目录一准备知识1.1大根堆和小根堆二堆排序基本步骤2.1构造堆2.2固定最大值再构造堆三总结四代码一准备知识堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆1.1大根…

    2022年7月12日

发表回复

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

关注全栈程序员社区公众号