Category Archives: CS-343

What have I learned about the term “Association”?

For in-class activities of this week, we learned about modeling with UML class diagram. There were many important elements to compose a class, such as properties, operations, and association. However, my team got stuck at the “association” section, we could not clearly distinguish the different types of relationships between two classes, especially the relationship named have-a. Therefore, I thought it was a good opportunity for myself to learn more about the term “association”.

There are many articles and blogs analyzing about different types of relationships between classes. However, many of them look very complicated with a long list of different relationship types and some are very confusing. Fortunately, I found this article, entitled Association, Composition and Aggregation in Java, which finally satisfied my curiosity about “association”, because the content of this article is focused only into the definition of “association” and the analysis of its types which are aggregation and composition.

There are some key points that I have taken away after reading the article. First, association represents a relationship between two classes, depending on each situation, association can be one-to-one, one-to-many, many-to-one, and many-to-many. Second, association has two special forms, which are aggregation and composition.

For aggregation, this term is also known as has-a relationship (a weak association), which is one way relationship and each entity of the relationship can exist independently. The author also provides a simple example to describe those characteristics of aggregation, which is an Institute has-a Department, and Department has-a Student. This is one way relationship because a department can have students, but vice versa is impossible. Moreover, if the Department class is removed, the Student class can still exist independently.

For composition, this is the part-of relationship (a strong association), and the two entities are dependent to each other, which means a class (child) cannot exist without the existing of another class (parent). For this definition, the author gives an example of Book and Library, Book is part-of Library. So, if Library class is removed, Book class cannot exist. In my opinion, this example does not make sense to the part-of relationship because I think Book still can exist without Library. Therefore, I have looked for other resources to find a good example for composition. UML Association vs Aggregation vs Composition is a good resource to provide real-life examples for each conception. Like the first article, this one also focuses on the analysis of the term “association” and its two special types, aggregation and composition. According to the article, I got an example that Head, Hand, Leg are part-of Person. Thus, if Person class is removed, Head, Hand and Leg classes cannot exist. For myself, this is a perfect example to describe the term composition.

In short, I have learned a lot of information and had a clear understanding about the term “association” from the two articles recommended above. I will apply this knowledge to design relationships between classes in my UML diagrams. Moreover, I believe the articles that I choose are good resources because their content is clearly organized with good examples. In other words, I would say the two articles complement each other, so it is good if readers can pull out the best parts from each article and be able to combine them consistently.

From the blog CS@Worcester – T's CSblog by tyahhhh and used with permission of the author. All other rights reserved by the author.

Object Oriented Programming Podcast

https://podcasts.apple.com/us/podcast/object-oriented-programming/id1457402220?i=1000521718007

This podcast directly relates to our class as its main topic is Object Oriented Programming. The speaker starts off explaining that Object orientated programs are made of objects which interact with each other. These Programs are class based and in object oriented programming the objects are instances of the classes and their types are determined by said classes. Many different coding languages are used in object oriented programming such as Java, and Python because they support object programming which the speaker says is in combination with procedural programming. Most languages that support object programming are multi paradigm and contain variables which store information in a lower amount of data types for example integers which can include strings or lists. Methods used in object programming take inputs and generate outputs based on the data used which can be attributed to loops and conditionals. In object programming you can group methods into files (or modules) to help keep your program organized. The files or modules that you use will not conflict with methods or variables in a different file that may share the same name. The languages that support object programming are known for using inheritance in order to reuse previous code (classes). Classes contain the methods and data used in the code and they also contain class functions including the classes objects and instances. According to the podcasts author objects can at times correspond to things in the real world, the example he uses is when a graphics program uses shapes like circles or squares or when a shopping website uses a “shopping cart”. While some objects represent things relating to the real world other objects represent things that are more abstract like a file or a translation of some sort. Object programming is based on the concept of objects and the data they contain whether it be methods, data fields, etc. If you use an object to organize unlike classes that is not object oriented programming, you are meant to use objects to organize data that has similarities. An object being an instance of a class will contain methods which contain variables, the variables in objects still belong to the class and can also be called class variables. A variable can also be solely attached to the object and it will be called an instance variable. Class methods only have access to variables contained in the class but ther can also be instance methods which like instance variables belong to an object and they only have access to the instance variables for the specific object. Objects also provide a layer of abstraction which separates internal and external code. Objects can be called upon by the code using the method and parameters for the object, you must call a constructor to call upon an object. In some languages objects can be composed by using traits, class based languages instantiate the objects with the classes while in prototype languages there are no classes and objects are their own entities. The Podcast explains the basics of Object Oriented Programming and the different languages and components used.

From the blog CS@Worcester – Dylan Brown Computer Science by dylanbrowncs and used with permission of the author. All other rights reserved by the author.

Concurrency

For this weeks blog post i have found a website on concurrency. Concurrency is the ability of different parts or units of a program, algoritham, or problem to be executed out of order, without affecting the final outcome. A good example of concurrency can be seen on the website. For this particluar example they used the analogy of traffic. According to https://sceweb.uhcl.edu/ , the owner of the website, they say, “Parallel traffic streams on different roadways having little interaction cause few problems. Parallel streams in adjacent lanes require some coordination for safe interaction, but a much more severe type of interaction occurs at an intersection, where careful coordination is required.” (https://sceweb.uhcl.edu/). As you can see from the example the traffic patterens on two different roadways can happen simultaneously without having any issue towards their final goal, however in an intersection of the two is when issues start to arise. This is a great concept to keep in mind while coding because it nice that you can have multiple things running simultaneously but when you start to intersect the commands to run these programs is when you will start experiencing issues.

https://baptiste-wicht.com/posts/2010/05/java-concurrency-part-1-threads.html

From the blog CS@worcester – Michale Friedrich by mikefriedrich1 and used with permission of the author. All other rights reserved by the author.

Object-Oriented Programming(OOP)

This week’s blog focuses on the aspects of object-oriented programming. Understanding OOP well is essential for any developer who wants to build a high-quality software program.

In object-oriented programming, the program will be divided into many different small, manageable, reusable programs.

Each of them has its own identity, data, logic, and how it’s going to fit with the rest of the others. Usually, we may think about objects, we think about the real-world application. Something we should be able to see, touch, and feel. Then Object-Orientation was intended to be closer to the real world.

As mentioned above something is visible to all of you, like the buildings, Vehicles, Foods. Something that you can’t touch but will be able to feel or not like the time, temperature, events.

Well in programming each object has its attributes, and behavior. Objects are separate from one another as we expect them to behave. They are independent have their history and their own identity.

What are attributes in Objects?

As I said, Objects are independent due to their nature, they have their properties. For example, in the case of a vehicle, its model, color, year, and more. Their roles are to describe the current state of an object because each state is independent of the other. A vehicle might make by Toyota that’s red and another maybe blue.

How do they behave?

Behavior is certain action that the Object can perform. For example, in the case of a vehicle, it will be able to speed, stop, or horn. It’s important to remember that each has independent of the other.  To talk about Objects, Classes become inherently related.

What is a class, and how does it fit into our program?

Well, a class is a place where you can identify the behaviors and properties of an Object. The properties and behavior of an Object will be defined inside a class.

Abstraction, Encapsulation, Inheritance, and Polymorphism play a big part in object-oriented programming. This means that the focus starts on the common properties and behaviors of some Objects and left out the less important things. Separate the program into small pieces. Instead of creating different classes, we can instead create one generic class that has the common, and essential properties and behavior of those classes. use Polymorphism where an object can take the shape of many different forms. This is a very quick statement showing the stage of Object-Oriented Programming

From the blog CS@Worcester – Site Title by proctech21 and used with permission of the author. All other rights reserved by the author.

Docker

Source:

https://www.zdnet.com/article/what-is-docker-and-why-is-it-so-darn-popular/

I chose to read and write a blog post about Docker for my Week two post. I chose Docker because it is an important tool in the development community today. And because it runs in the background while we work. What Docker is actually doing, and how it accomplishes that are abstracted from us. So I wanted to learn more about how Docker works, and why so many teams are using it today.

With Docker, developers can run their applications in containers, instead of a virtual machine. A container is a unit of software that contains everything that an application needs to run on a host computer. The container is the same for all developers that access it.

Containers are an enticing alternative to Vitual machines because they have much less intensive system requirements. A VM simulates hardware and has a complete operating system, but a docker container does not. Instead, a container runs on a single linux instance. This allows developers to run multiple docker containers simultaneously. And saves the company money in server costs.

Docker containers also work well with the agile methodology of Continous Deployment. This means that developers are integrating and deploying their code quickly and regularly. Agile methodologies are becoming the industry standard. With Agile, the development process is broken into smaller units of work, that are divided amongsts small teams. Docker helps Agile teams collaborate within a shared version of their application within a container.

Docker is used by large companies in enterprise software where they are sometimes building massive applications. Docker containers make workloads more portable. As different containers can run different versions of an application, that can be running on seperate servers.

Over the summer I did an internship where I worked on enternprise .NET web applications. During my internship, we used docker containers for our Dev environment when building web applications. And we also used a Docker container for our shared PostGreSQL databases. This allowed us to work with the same sample data, in our databases, and work in the same Dev environment, before sending the next update to User Acceptance Testing.

Reading this blog has helped me understand how Docker works and why it is popular. And has given me a new perspective on why my company uses Docker. I will be using this knowledge as we are using Docker in this course, and the Software Development Capstone project. I will most likely use this knowledge in my career, as so many companies are using docker today.

From the blog CS@Worcester – Jim Spisto by jspisto and used with permission of the author. All other rights reserved by the author.

Docker

As my journey to find my very first internship as a software developer. I’ve noticed that the majority of the posts require Docker’s experience. From there, I realized that Docker is an essential tool for Software Developers and their professional careers. This blog is about Docker of what it is and also why it is necessary nowadays.

Docker is a container running time. A container is a standard unit of software that packs up codes and all their dependencies so the applicant might run quickly and reliably from one computing environment to another. Docker container is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries, and settings

The good thing about Docker is it helps developers get their application to work on every machine. Also, the abundant app’s libraries and dependencies ready to be executed make Docker even better compares to its same category competitive. Besides that, Docker is lightfast and also very easy to maintain.

Also, running applications in a container brings many benefits to both developers such as:

  • Portability: Once developers run their containerized application on their machines they also would be able to deploy it to other operations and be assured that their applications would perform the same as on their own.
  • Performance: VMs are alternative methods for developers but Docker offers much more compared to regular VMs as faster to deploy, quicker to start, and smaller footprint than ordinary VMs
  • Agility: Containers offer portability and performance help reducing time-consuming and make the process responsive and agile. Such advantages provide a better way to deliver the right software at the right time.
  • Isolation: A Docker container that contains one of the applications also includes the relevant versions of any supporting software that the developer’s application requires. If other Docker containers have different versions of the same supporting software, that is not a problem because Docker containers are independent.

Most uses of Docker make developer life simply better while developing applications. But it does not mean that Docker could entirely replace the actual Virtual Machine. VMs are still much needed if we have to have a whole operating system for each customer or the entire sandbox. VMs are still being used as middle layers when you have a big server framework and many customers that using them. Despite many good things that Docker could bring to developers, VMs still has a firm grip within the industry and development cycle.

From the blog CS@Worcester – Nin by hpnguyen27 and used with permission of the author. All other rights reserved by the author.

UML Class Diagram Arrows

Seeing how one of my CS classes just recently introduced me to UML class diagrams, I wanted to conduct some research on the formation and comprehension of the diagrams. I looked for blog posts that showed examples of the diagrams and how they would be written, since I like reading written explanations and visual representations.

I stumbled across a blog covering the different arrows used in the diagrams, as well as when and how they can be used. That blog can be accessed at https://www.gleek.io/blog/class-diagram-arrows.html.

The blog presents to us six different types of class diagram arrows: directed association, inheritance, composition, realization/implementation, aggregation, and dependency. I had already seen directed association, inheritance, and implementation arrows, but I had not yet familiarized myself with the others. I learned the following from the blog:

A composition arrow in a UML diagram does not have an actual arrowhead, but instead looks like a solid diamond at the end of a solid line. The solid diamond is at the sub-object end of the solid line, and indicates that the sub-object cannot exist without the container class. It can be shown using -<*>.

The aggregation arrow looks just like the composition arrow, except that the diamond is hollow/white. The aggregation arrow is used to show association between two classes, but the subclass can still exist without the super class. It is shown with -<>.

Dependency arrows have a thin arrowhead and a dashed line. They show that two elements depend on each other but the dependency is weaker than standard association. Making changes to the parent class will have an impact on the child class. It is shown with -.->.

This blog was a great source to understand the usage of different arrows for UML diagrams. It provided great examples of when to use aggregation and composition, and I now know to take those into account for when I will need to make my own UML class diagrams in the future. It was easy to understand how the relationship between a library class and a book class can use the aggregation arrow because books can still exist after they are borrowed from the library. It was also easy to see how the relationship between a shirt class and pocket class can be composition association because a shirt pocket would not exist without the shirt. I also think it was a nice touch for the blog to include a video on the page where it explains the arrows and shows how the examples would be typed up on gleek.io.

From the blog CS@Worcester – CS With Sarah by Sarah T and used with permission of the author. All other rights reserved by the author.

Introductory Post

Hello hello, testing to see if I finally got this thing working. Looks like this should serve as another archive for my dumb words. Hopefully I check in from time to time after this course and read up on what I was struggling with. Or maybe somebody will stumble across a problem that I’ve solved and posted about – who knows?

From the blog CS@worcester – Dummies that Code by howbrash and used with permission of the author. All other rights reserved by the author.

POGIL… the way we’re learning.

POGIL is an acronym which stands for Process Oriented Guided Inquiry Learning.

We’re using this style of teaching in my Computer Architecture and Desig… One of my Software Development courses this semester (the name of the course is significantly long). I can see how this style of teaching can be beneficial to showing how teams get work done in the real world. Each person in the team has a role that they must fulfill. In almost all the groups there are four participants. Each person will have to fill one of four roles; Manager, Recorder, Reflector, and Presenter and be responsible for that role solely. While we are all working as a team to achieve a common goal, I do find it particularly difficult to not impede on my teammates roles and essentially “do their job” for them. I’m not saying that my teammates aren’t doing their jobs adequately. For example, it seems like a far easier task to correct a typo our Recorder has made in our write-ups, but instead I remind myself to tell my teammate “Hey you may have spelled this word wrong, could you go back and fix this please?” While this seems silly the practice makes some type of sense to me.

There’s a joke a friend told me once.

“How many Software devs does it take to fix a light bulb?”

“…”

“None, it’s a hardware problem.”

I must admit he got a hearty chuckle from me when he delivered the corny joke, but there is some truth to this. Each department in a company has a team of people who’s expertise is in a certain area. While they maybe able to fix something that may have gone wrong, their time is a precious resource that they could utilize to focus on other important tasks than to be bogged down by a task that is someone else’s job. While I did highlight a strong point of this type of strategy, I also want to note that I can see how this type of strategy can cause more time to elapse while getting a task completed, but in a sense it is the least complicated way of getting work done I suppose.

In certain settings there may only be one answer to getting a problem correct. But the pathways that lead towards that answer may be limitless. This is where the POGIL approach seems to put its emphasis on its effectiveness of getting students/participants to realize that “logical thinking and teamwork are prized above simply getting the ‘right’ answer”.

You can read more about POGIL here. https://pogil.org/about-pogil/what-is-pogil

From the blog CS@Worcester – You have reached the upper bound by cloudtech360 and used with permission of the author. All other rights reserved by the author.

Why is HTML Important

HTML which is also known as ‘Hypertext Markup Language’ is a programming language used to describe information you may find on a web page. When used with CSS and JavaScript, these three makes up the essential foundation of any website found worldwide. A website may be broken down into three components. First, we have the page’s appearance which is made with CSS. CSS is also known as ‘Cascading Style Sheets’ is used to design the appearance of a webpage. This allows you to set things from the size and font of texts shown, to the color of the page, and so on.  Then we have the functionality of the page using JavaScript. JavaScript is a language used to program the page. For example, if you were to click on “shopping cart” on amazon, this would navigate you to a page that were to show you what’s in your cart that you want to buy.  Lastly, we have what some call the ‘bones’ of the webpage. This is where HTML is used.
CSS is known as ‘Cascading Style Sheets’ is used to design the appearance of a webpage.
When designing a webpage, many contains important information that may recede in headings, paragraphs, or many other types of data. HTML is used to specify what kind of information goes into these types of things on a webpage. This type of work is mainly used by Front-end developers. These developers use HTML language to code different things that relates to the overall structure of the page.
HTML is something every website uses no matter what browser you use. From social media web pages like Facebook and Google, to web players like YouTube or Spotify. If you were to look at the coding behind done for these pages, you would see that they all use HTML. That’s why HTML is important.
To become a front-end or full-stack web developer, HTML is a good place to start off with. Combine HTML with CSS and JavaScript will provide you all the necessary to create an interactive webpage.

A blog I would like to share is https://www.theblogstarter.com/html-for-beginners/. This blog has a lot of useful information about HTML and if you’re looking into become a front-end developer or a full-stacked developer I highly encourage it!
I chose to write about HTML because I am highly interested in learning full-stacked development. I think it will be very useful in the type of career I will choose once I graduate from Worcester State University. Another reason why I chose to research and write about it, is because it is on our syllabus, we will be learning about front-end development, so I thought it was appropriate to talk about HTML.

From the blog CS@Worcester – Michael&#039;s Developer Blog by michaelchaau and used with permission of the author. All other rights reserved by the author.