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

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

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

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

注解:

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

生活举例:

在我们的生活中,泛型的样例事实上已经伴随了我们非常久,就是快递,我们想想,快递公司关心的重点是什么?不是我们要邮寄什么东西,而是他怎么选择路径。并尽最大的努力节省成本。所以他们定义自己快递活动的时候,就将全部的快递件当成黑箱子处理看,他做规划,是北京到四川,火车怎么走。那条路线,轮船怎么走,那条路线,运送到哪个快递员手里最节省成本,这样定义的优点是我们用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>

执行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHZzaHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

总结:

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

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

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

时间: 2024-11-09 03:05:41

面向对象设计——通用愉快的经历的相关文章

面向对象设计——泛型的愉快体验

在实际的项目中,我们经常看到有人写了很多代码,抽象了很多类,而这些类无不是采用了泛型和委托,应用了这辆种技术后,经常有人给我们说,代码的复用性和耦合性就降低了,那作为一个合格的面向对象的程序设计人员,这种技术成为了我们的必备技能,今天就跟着我一起来一次轻松愉快的旅行! 定义(如果吃力,请直接看我对他的注解): 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写代码时定 义一些可变部分,那些部分在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样.将类型参

Java程序员应该了解的10个面向对象设计原则

面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Ap

(转载)Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

【C++常识】effective C++ 使用条款——内存管理/继承和面向对象设计/杂项

第六章 继承和面向对象设计 条款35: 使公有继承体现 "是一个" 的含义 1.子类对象一定"是一个"基类对象,基类对象不一定是子类对象 条款36: 区分接口继承和实现继承 1.希望派生类只继承成员函数的接口--将函数声明为纯虚函数 2.希望派生类同时继承函数的接口和实现,但允许派生类改写实现--将函数声明为虚函数 3.希望同时继承接口和实现,并且不允许派生类改写任何东西--声明为非虚函数 条款37: 决不要重新定义继承而来的非虚函数 1.基类声明为非虚的函数表示这

Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

面向对象设计的五原则-转

http://www.uml.org.cn/mxdx/201106293.asp原文地址 如何向妻子解释OOD   发布于2011-06-29   前言 此文译自CodeProject上<How I explained OOD to my wife>一文,该文章在Top Articles上排名第3,读了之后觉得非常好,就翻译出来,供不想读英文的同学参考学习. 作者(Shubho)的妻子(Farhana)打算重新做一名软件工程师(她本来是,后来因为他们孩子出生放弃了),于是作者就试图根据自己在软

Java面向对象设计原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Apac

6. javacript高级程序设计-面向对象设计

1. 面向对象设计 1.1 理解对象 1.1.1 属性类型 (1). 数据属性:相当于对象的字段,包含一个数据值的位置,在这个位置可以读取和写入值.数据属性中有4个描述其行为的特性: l [[Configurable]]:表示能否通过delete删除属性从而重新定义属性 l [[Enumerable]]:表示是否通过for-in循环返回属性 l [[Writable]]:表示能否修改属性的值 l [[Value]]:包含这个属性的数据值 要修改属性默认的特性,必须使用ECMAScript5的Ob

面向对象设计步骤二-------指定属性的类型和可见性,分配职责(GRASP),消息驱动,设计模式进行局部设计

增加遗漏的属性,指定属性的类型和可见性: 在面向对象设计阶段,需要对每个类进行详细设计,不全过程中遗漏的属性,并且确定每个属性的数据类型,指定每个属性的可见性:属性的可见性指外部对象对属性的访问权限,一般包括私有,保护和共有几种类型: 在实际开发中,除了那些比较简单且不常发生变化的属性可以直接暴露给客户以外,其他属性最好设置为私有或者保护并且最好都能用GetXXX()和SetXXX()等访问方法封装一下 分配职责,定义执行每个职责的方法: 职责:是一个类或者类型的契约或者义务 面向对象系统中的类